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 SQL防注入代码集合
Apr 25 PHP
PHP中对用户身份认证实现两种方法
Jun 04 PHP
php define的第二个参数使用方法
Nov 04 PHP
php命令行用法入门实例教程
Oct 27 PHP
php中in_array函数用法探究
Nov 25 PHP
thinkPHP实现瀑布流的方法
Nov 29 PHP
PHP原生函数一定好吗?
Dec 08 PHP
Yii中CGridView实现批量删除的方法
Dec 28 PHP
基于PHP实现简单的随机抽奖小程序
Jan 05 PHP
利用php-cli和任务计划实现刷新token功能的方法
May 03 PHP
laravel excel 上传文件保存到本地服务器功能
Nov 14 PHP
php实现简单四则运算器
Nov 29 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运行出现Notice : Use of undefined constant 的完美解决方案分享
2012/03/05 PHP
php读取文件内容的三种可行方法示例介绍
2014/02/08 PHP
laravel框架的安装与路由实例分析
2019/10/11 PHP
用Greasemonkey 脚本收藏网站会员信息到本地
2009/10/26 Javascript
js利用与或运算符优先级实现if else条件判断表达式
2010/04/15 Javascript
仅IE不支持setTimeout/setInterval函数的第三个以上参数
2011/05/25 Javascript
nodejs win7下安装方法
2012/05/24 NodeJs
jquery的live使用注意事项
2014/02/18 Javascript
浅析javascript操作 cookie对象
2014/12/26 Javascript
jQuery EasyUI Dialog拖不下来如何解决
2015/09/28 Javascript
Bootstrap学习笔记之css样式设计(1)
2016/06/07 Javascript
好好了解一下Cookie(强烈推荐)
2016/06/14 Javascript
Bootstrap被封装的弹层
2016/07/20 Javascript
最丑的时钟效果!js canvas时钟制作方法
2016/08/15 Javascript
基于jQuery和CSS3实现APPLE TV海报视差效果
2017/06/16 jQuery
详解微信小程序框架wepy踩坑记录(与vue对比)
2019/03/12 Javascript
Vue之Mixins(混入)的使用方法
2019/09/24 Javascript
Vue3.x源码调试的实现方法
2019/10/13 Javascript
两个使用Python脚本操作文件的小示例分享
2015/08/27 Python
浅谈五大Python Web框架
2017/03/20 Python
Python配置mysql的教程(推荐)
2017/10/13 Python
python如何为创建大量实例节省内存
2018/03/20 Python
python os用法总结
2018/06/08 Python
通过实例了解Python str()和repr()的区别
2020/01/17 Python
解决PyCharm不在run输出运行结果而不是再Console里输出的问题
2020/09/21 Python
探索HTML5本地存储功能运用技巧
2016/03/02 HTML / CSS
Super-Pharm波兰:药房和香水在一个地方
2020/08/18 全球购物
某/etc/fstab文件中的某行如下: /dev/had5 /mnt/dosdata msdos defaults,usrquota 1 2 请解释其含义
2013/09/18 面试题
linux面试题参考答案(7)
2014/07/24 面试题
商务助理岗位职责
2013/11/13 职场文书
我心目中的好老师活动方案
2014/08/19 职场文书
档案工作汇报材料
2014/08/21 职场文书
2015年度团总支工作总结
2015/04/23 职场文书
唐山大地震的观后感
2015/06/05 职场文书
失恋33天观后感
2015/06/11 职场文书
用PYTHON去计算88键钢琴的琴键频率和音高
2022/04/10 Python