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 相关文章推荐
ecshop 批量上传(加入自定义属性)
Mar 20 PHP
PHP Global变量定义当前页面的全局变量实现探讨
Jun 05 PHP
PHP迭代器的内部执行过程详解
Nov 12 PHP
Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 2611816 bytes)
Nov 08 PHP
PHP代码优化技巧小结
Sep 29 PHP
PHP开发中常用的十个代码样例
Feb 02 PHP
PHP MYSQL实现登陆和模糊查询两大功能
Feb 05 PHP
thinkphp3.2点击刷新生成验证码
Feb 16 PHP
Symfony2联合查询实现方法
Mar 18 PHP
windows server 2008/2012安装php iis7 mysql环境搭建教程
Jun 30 PHP
PHP实现页面静态化的超简单方法
Sep 06 PHP
PHP文件操作简单介绍及函数汇总
Dec 11 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
隐藏X-Space个人空间下方版权方法隐藏X-Space个人空间标题隐藏X-Space个人空间管理版权方法
2007/02/22 PHP
php自定义函数之递归删除文件及目录
2010/08/08 PHP
完美解决令人抓狂的zend studio 7代码提示(content Assist)速度慢的问题
2013/06/20 PHP
PHP的PDO错误与错误处理
2019/01/27 PHP
Centos7安装swoole扩展操作示例
2020/03/26 PHP
JQuery.ajax传递中文参数的解决方法 推荐
2011/03/28 Javascript
js日期相关函数总结分享
2013/10/15 Javascript
引用 js在IE与FF之间的区别详细解析
2013/11/20 Javascript
解析img图片没找到onerror事件 Stack overflow at line: 0
2013/12/23 Javascript
js读写cookie实现一个底部广告浮层效果的两种方法
2013/12/29 Javascript
控制文字内容的显示与隐藏示例
2014/06/11 Javascript
详解JavaScript的Polymer框架中的通知交互
2015/07/29 Javascript
window.open不被拦截的简单实现代码(推荐)
2016/08/04 Javascript
基于node.js依赖express解析post请求四种数据格式
2017/02/13 Javascript
在vue中v-bind使用三目运算符绑定class的实例
2018/09/29 Javascript
微信小程序textarea层级过高(盖住其他元素)问题的解决办法
2019/03/04 Javascript
微信小程序云开发如何使用云函数生成二维码
2019/05/18 Javascript
Nuxt的路由配置和参数传递方式
2020/11/06 Javascript
[04:22]DOTA2大事件之护国神翼
2020/08/14 DOTA
python利用微信公众号实现报警功能
2018/06/10 Python
详解python算法之冒泡排序
2019/03/05 Python
Python2与Python3的区别实例总结
2019/04/17 Python
详解python uiautomator2 watcher的使用方法
2019/09/09 Python
Python 最强编辑器详细使用指南(PyCharm )
2019/09/16 Python
详解Django中异步任务之django-celery
2020/11/05 Python
Airbnb爱彼迎官网:成为爱彼迎房东,赚取收入
2019/03/14 全球购物
法国购买隐形眼镜和眼镜网站:Optical Center
2019/10/08 全球购物
如何开发安全的AJAX应用
2014/03/26 面试题
计算机专业自荐信范文
2014/05/28 职场文书
宣传标语大全
2014/07/01 职场文书
教师个人总结范文
2015/02/11 职场文书
秋菊打官司观后感
2015/06/03 职场文书
演讲稿之感恩老师(三篇范文)
2019/09/06 职场文书
《悬崖边的树》读后感2篇
2019/12/02 职场文书
python 自动化偷懒的四个实用操作
2021/04/11 Python
使用Python解决图表与画布的间距问题
2022/04/11 Python