php inc文件使用的风险和注意事项


Posted in PHP onNovember 12, 2013

数据库使用中需要关注的主要问题之一是访问权限即用户名及密码的暴露。在编程中为了方便,一般都会用一个db.inc文件保存,如:

<?php
 $db_user = 'myuser';
$db_pass = 'mypass';
$db_host = '127.0.0.1';
 $db = mysql_connect($db_host, $db_user, $db_pass);
 ?>

用户名及密码都是敏感数据,是需要特别注意的。他们被写在源码中造成了风险,但这是一个无法避免的问题。如果不这么做,你的数据库就无法设置用户名和密码进行保护了。
如果你读过http.conf(Apache的配置文件)的默认版本的话,你会发现默认的文件类型是text/plain(普通文本)。这样,如果db.inc这样的文件被保存在网站根目录下时,就引发了风险。所有位于网站根目录下的资源都有相应的URL,由于Apache没有定义对.inc后缀的文件的处理方式类型,在对这一类文件进行访问时,会以普通文本的类型进行返回(默认类型),这样访问权限就被暴露在客户的浏览器上了。
为了进一步说明这个风险,考虑一下一个以/www为网站根目录的服务器,如果db.inc被保存在/www/inc,它有了一个自已的URLhttp://example.org/inc/db.inc(假设example.org是主机域名)。通过访问该URL就可以看到db.inc以文本方式显示的源文件。无论你把该文件保存在/www哪个子目录下,都无法避免访问权限暴露的风险。
对这个问题最好的解决方案是把它保存在网站根目录以外的包含目录中。你无需为了达到包含它们的目的而把它们放至在文件系统中的特定位置,所有只要做的只是保证Web服务器对其有读取权限。因此,把它们放在网站根目录下是没有必要的风险,只要包含文件还位于网站根目录下,任何减少风险的努力都是徒劳的。事实上,你只要把必须要通过URL访问的资源放置在网站根目录下即可。毕竟这是一个公共的目录。
前面的话题对于SQLite数据库也有用。把数据库保存在当前目录下是非常方便的,因为你只要调用文件名而无需指定路径。但是,把数据库保存在网站根目录下就代表着不必要的风险。如果你没有采用安全措施防止直接访问的话,你的数据库就危险了。
如果由于外部因素导致无法做到把所有包含文件放在网站根目录之外,你可以在Apache配置成拒绝对.inc资源的请求。
<Files ~ "\.inc$">
  Order allow,deny
  Deny from all
</Files>

如果只是因为要举个例子而这么写的话,可以理解,毕竟大家学到了一些手段,但这个例子未免生硬了一点。实际上只要把该文件更名为db.inc.php就可以了。就好象房子破了个洞而不去修补,却在外面去造一个更大的房子把破房子套起来一样。
后面你还可以看到另外一种防止数据库访问权限暴露的方法,该方法对于共享服务器环境(在该环境下尽管文件位于网站根目录之外,但依然存在暴露的风险)非常有效。
PHP 相关文章推荐
php快速url重写 更新版[需php 5.30以上]
Apr 20 PHP
PHP的一个基础知识 表单提交
Jul 04 PHP
关于php内存不够用的快速解决方法
Oct 26 PHP
PHP 动态生成静态HTML页面示例代码
Jan 15 PHP
跟我学Laravel之安装Laravel
Oct 15 PHP
php使用标签替换的方式生成静态页面
May 21 PHP
php计算税后工资的方法
Jul 28 PHP
php+ajax 实现输入读取数据库显示匹配信息
Oct 08 PHP
php验证手机号码
Nov 11 PHP
PHP使用socket发送HTTP请求的方法
Feb 14 PHP
yii2安装详细流程
May 23 PHP
PHP+redis实现的悲观锁机制示例
Jun 12 PHP
php防止SQL注入详解及防范
Nov 12 #PHP
php session劫持和防范的方法
Nov 12 #PHP
php后门URL的防范
Nov 12 #PHP
php打开远程文件的方法和风险及解决方法
Nov 12 #PHP
php使用exec shell命令注入的方法讲解
Nov 12 #PHP
PHP使用PHPMailer发送邮件的简单使用方法
Nov 12 #PHP
PHP迭代器的内部执行过程详解
Nov 12 #PHP
You might like
深入理解PHP几个算法:PHP冒泡、PHP二分法、PHP求素数、PHP乘法表
2013/06/06 PHP
PHP base64编码后解码乱码的解决办法
2014/06/19 PHP
destoon在360浏览器下出现用户被强行注销的解决方法
2014/06/26 PHP
PHP获取当前所在目录位置的方法
2014/11/26 PHP
非常实用的php验证码类
2016/05/15 PHP
PHP基于自定义函数生成笛卡尔积的方法示例
2017/09/30 PHP
javascript简单事件处理和with用法介绍
2013/09/16 Javascript
javascript分页代码实例分享(js分页)
2013/12/13 Javascript
jquery单选框radio绑定click事件实现方法
2015/01/14 Javascript
JavaScript实现级联菜单的方法
2015/06/29 Javascript
jQuery Mobile中的button按钮组件基础使用教程
2016/05/23 Javascript
AngularJS 路由详解和简单实例
2016/07/28 Javascript
JavaScript实现url参数转成json形式
2016/09/25 Javascript
JavaScript数组操作详解
2017/02/04 Javascript
jQuery复合事件结合toggle()方法的用法示例
2017/06/10 jQuery
Vue使用vue-cli创建项目
2017/09/01 Javascript
深入学习JavaScript中的bom
2019/05/27 Javascript
微信小程序如何实现精确的日期时间选择器
2020/01/21 Javascript
vue添加自定义右键菜单的完整实例
2020/12/08 Vue.js
[03:19]2016国际邀请赛中国区预选赛第四日TOP10镜头集锦
2016/07/01 DOTA
[00:37]食人魔魔法师轮盘吉兆顺应全新至宝将拥有额外款式
2019/12/19 DOTA
Python字符串通过'+'和join函数拼接新字符串的性能测试比较
2019/03/05 Python
详解Python3之数据指纹MD5校验与对比
2019/06/11 Python
纯python进行矩阵的相乘运算的方法示例
2019/07/17 Python
浅谈python已知元素,获取元素索引(numpy,pandas)
2019/11/26 Python
Python文本处理简单易懂方法解析
2019/12/19 Python
Python 格式化输出_String Formatting_控制小数点位数的实例详解
2020/02/04 Python
英国高档时尚男装购物网站:MR PORTER
2016/08/09 全球购物
介绍一下常见的木马种类
2014/11/15 面试题
安全教育心得体会
2013/12/29 职场文书
中西医专业毕业生职业规划书
2014/02/24 职场文书
工程项目建议书范文
2014/03/12 职场文书
学校四风对照检查材料
2014/08/28 职场文书
委托证明书
2014/09/17 职场文书
领导干部查摆“四风”问题自我剖析材料思想汇报
2014/10/05 职场文书
辞职信范文大全
2015/03/02 职场文书