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的图形函数中显示汉字
Oct 09 PHP
PHP中的超全局变量
Oct 09 PHP
同时提取多条新闻中的文本一例
Oct 09 PHP
PHP面向对象分析设计的61条军规小结
Jul 17 PHP
解析php开发中的中文编码问题
Aug 08 PHP
使用PHP导出Redis数据到另一个Redis中的代码
Mar 12 PHP
php cookie名使用点号(句号)会被转换
Oct 23 PHP
PHP批量去除BOM头代码分享
Jun 26 PHP
php类中的$this,static,final,const,self这几个关键字使用方法
Dec 14 PHP
PHP连接MySQL数据库并以json格式输出
May 21 PHP
PHP实现微信申请退款功能
Oct 01 PHP
php服务器的系统详解
Oct 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缩略图等比例无损压缩,可填充空白区域补充色
2011/06/10 PHP
基于PHP代码实现中奖概率算法可用于刮刮卡、大转盘等抽奖算法
2015/12/20 PHP
php文件上传 你真的掌握了吗
2016/11/28 PHP
Laravel5.1框架注册中间件的三种场景详解
2019/07/09 PHP
脚本安需导入(装载)的三种模式的对比
2007/06/24 Javascript
Jquery Ajax请求代码(2)
2011/01/07 Javascript
JavaScript实现页面实时显示当前时间的简单实例
2013/07/20 Javascript
使用Javascript实现选择下拉菜单互移并排序
2016/02/23 Javascript
JS生成某个范围的随机数【四种情况详解】
2016/04/20 Javascript
JS组件Bootstrap Table使用实例分享
2016/05/30 Javascript
jQuery+css实现非常漂亮的水平导航菜单效果
2016/07/27 Javascript
BootStrap网页中代码显示用法详解
2016/10/21 Javascript
iscroll.js滚动加载实例详解
2017/07/18 Javascript
vue实现留言板todolist功能
2017/08/16 Javascript
使用vue的v-for生成table并给table加上序号的实例代码
2017/10/27 Javascript
Angular4实现图片上传预览路径不安全的问题解决
2017/12/25 Javascript
微信小程序picker组件关于objectArray数据类型的绑定方法
2019/03/13 Javascript
vue 实现小程序或商品秒杀倒计时
2019/04/14 Javascript
Python中实现三目运算的方法
2015/06/21 Python
Python删除Java源文件中全部注释的实现方法
2017/08/30 Python
详细解读tornado协程(coroutine)原理
2018/01/15 Python
python实现微信发送邮件关闭电脑功能
2018/02/22 Python
详解Python使用Plotly绘图工具,绘制甘特图
2019/04/02 Python
python实现比较类的两个instance(对象)是否相等的方法分析
2019/06/26 Python
python opencv 图像边框(填充)添加及图像混合的实现方法(末尾实现类似幻灯片渐变的效果)
2020/03/09 Python
一款简洁的纯css3代码实现的动画导航
2014/10/31 HTML / CSS
css3动画鼠标放上图片逐渐变大鼠标离开图片逐渐缩小效果
2021/01/27 HTML / CSS
英国领先的葡萄酒专家:Majestic Wine
2017/05/30 全球购物
戴尔新加坡官网:Dell Singapore
2020/12/13 全球购物
美国最大的购物网站:Amazon.com(亚马逊美国)
2020/05/23 全球购物
C++是不是类型安全的
2014/02/18 面试题
大学生水文观测实习自我鉴定
2013/09/29 职场文书
财务部副经理岗位职责
2014/03/14 职场文书
单位委托书范本
2014/04/04 职场文书
乡镇组织委员个人整改措施
2014/09/16 职场文书
redis缓存存储Session原理机制
2021/11/20 Redis