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 相关文章推荐
多重?l件?合查?(一)
Oct 09 PHP
探讨如何在php168_cms中提取验证码
Jun 08 PHP
PHP实现取得HTTP请求的原文
Aug 18 PHP
19个Android常用工具类汇总
Dec 30 PHP
php计算两个整数的最大公约数常用算法小结
Mar 05 PHP
Apache服务器下防止图片盗链的办法
Jul 06 PHP
CodeIgniter配置之routes.php用法实例分析
Jan 19 PHP
验证坐标在某坐标区域内php代码
Oct 08 PHP
thinkPHP简单调用函数与类库的方法
Mar 15 PHP
PHP关键特性之命名空间实例详解
May 06 PHP
php连接MSsql server的五种方法总结
Mar 04 PHP
PHP一个简单的无需刷新爬虫
Jan 05 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
11个PHP 分页脚本推荐
2011/08/15 PHP
PHP产生不重复随机数的5个方法总结
2014/11/12 PHP
PHP callback函数使用方法和注意事项
2015/01/23 PHP
php中session定期自动清理的方法
2015/11/12 PHP
javascript 清空form表单中某种元素的值
2009/12/26 Javascript
JavaScript Event学习第七章 事件属性
2010/02/07 Javascript
JQuery Ajax 跨域访问的解决方案
2010/03/12 Javascript
js多级树形弹出一个小窗口层(非常好用)实例代码
2013/03/19 Javascript
javascript实现数字验证码的简单实例
2014/02/10 Javascript
分享纯手写漂亮的表单验证
2015/11/19 Javascript
jQuery siblings()用法实例详解
2016/04/26 Javascript
bootstrap网页框架的使用方法
2016/05/10 Javascript
js+html5实现canvas绘制网页时钟的方法
2016/05/21 Javascript
微信小程序实现倒计时60s获取验证码
2020/04/17 Javascript
Vue仿今日头条实例详解
2018/02/06 Javascript
当vue路由变化时,改变导航栏的样式方法
2018/08/22 Javascript
JS/HTML5游戏常用算法之碰撞检测 像素检测算法实例详解
2018/12/12 Javascript
微信小程序实现日历效果
2018/12/28 Javascript
详解微信小程序获取当前时间及日期的方法
2019/04/28 Javascript
vue2配置scss的方法步骤
2019/06/06 Javascript
JavaScript this指向相关原理及实例解析
2020/07/10 Javascript
[01:35]2018完美盛典章节片——共竞
2018/12/17 DOTA
Python cookbook(数据结构与算法)找出序列中出现次数最多的元素算法示例
2018/03/15 Python
python将一个英文语句以单词为单位逆序排放的方法
2018/12/20 Python
Lookfantastic西班牙官网:英国知名美妆购物网站
2018/06/13 全球购物
加工操作管理制度
2014/01/19 职场文书
小学运动会班级口号
2014/06/09 职场文书
销售队伍口号
2014/06/11 职场文书
2014年民政局关于保密工作整改措施
2014/09/19 职场文书
基层党员四风问题自我剖析材料
2014/09/29 职场文书
社会治安综合治理责任书
2015/01/29 职场文书
学习焦裕禄观后感
2015/06/09 职场文书
2016应届毕业生就业指导课心得体会
2016/01/15 职场文书
《自己去吧》教学反思
2016/02/16 职场文书
“爱眼护眼,提前预防近视”倡议书3篇
2019/10/30 职场文书
浅析MongoDB之安全认证
2021/06/26 MongoDB