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基础知识:类与对象(5) static
Dec 13 PHP
php 分库分表hash算法
Nov 12 PHP
php生成的html meta和link标记在body标签里 顶部有个空行
May 18 PHP
用C/C++扩展你的PHP 为你的php增加功能
Sep 06 PHP
php对数组排序代码分享
Feb 24 PHP
PHP return语句的另一个作用
Jul 30 PHP
PHP中Memcache操作类及用法实例
Dec 12 PHP
php去除头尾空格的2种方法
Mar 16 PHP
Symfony的安装和配置方法
Mar 17 PHP
详解PHP的Yii框架中的Controller控制器
Mar 29 PHP
thinkphp项目部署到Linux服务器上报错“模板不存在”如何解决
Apr 27 PHP
PHP中快速生成随机密码的几种方式
Apr 17 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
关于session在PHP5的配置文件中的详细设置参数说明
2011/04/20 PHP
PHP独立Session数据库存储操作类分享
2014/06/11 PHP
ThinkPHP实现动态包含文件的方法
2014/11/29 PHP
php文件操作小结(删除指定文件/获取文件夹下的文件名/读取文件夹下图片名)
2016/05/09 PHP
thinkphp5 migrate数据库迁移工具
2018/02/20 PHP
php pdo连接数据库操作示例
2019/11/18 PHP
document对象execCommand的command参数介绍
2006/08/01 Javascript
浅谈JS日期(Date)处理函数
2014/12/07 Javascript
EasyUi datagrid 实现表格分页
2015/02/10 Javascript
JavaScript获得url所有参数键值表的方法
2015/03/21 Javascript
jQuery实现冻结表格行和列
2015/04/29 Javascript
浅析$.getJSON异步请求和同步请求
2016/06/06 Javascript
jquery控制页面的展开和隐藏实现方法(推荐)
2016/10/15 Javascript
微信小程序上滑加载下拉刷新(onscrollLower)分批加载数据(二)
2017/05/11 Javascript
JavaScript切换搜索引擎的导航网页搜索框实例代码
2017/06/11 Javascript
手动下载Chrome并解决puppeteer无法使用问题
2018/11/12 Javascript
Javascript实现一朵从含苞到绽放的玫瑰
2019/03/30 Javascript
JS中使用react-tooltip插件实现鼠标悬浮显示框
2019/05/15 Javascript
layer.prompt输入层的例子
2019/09/24 Javascript
layui+jquery支持IE8的表格分页方法
2019/09/28 jQuery
jQuery操作动画完整实例分析
2020/01/10 jQuery
JS+HTML实现自定义上传图片按钮并显示图片功能的方法分析
2020/02/12 Javascript
JavaScript 实现自己的安卓手机自动化工具脚本(推荐)
2020/05/13 Javascript
python通用读取vcf文件的类(复制粘贴即可用)
2020/02/29 Python
python标准库OS模块详解
2020/03/10 Python
Python任务自动化工具tox使用教程
2020/03/17 Python
移动端rem布局的两种实现方法
2018/01/03 HTML / CSS
Wiggle新西兰:自行车、跑步、游泳
2020/05/06 全球购物
大型车展策划方案
2014/02/01 职场文书
21岁生日感言
2014/02/27 职场文书
政风行风建设责任书
2014/07/23 职场文书
2014年高校辅导员工作总结
2014/12/09 职场文书
2015年教师节活动总结
2015/03/20 职场文书
经营目标责任书
2015/05/08 职场文书
建党伟业电影观后感
2015/06/01 职场文书
三严三实学习心得体会(精选N篇)
2016/01/05 职场文书