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 相关文章推荐
BBS(php &amp; mysql)完整版(七)
Oct 09 PHP
表单复选框向PHP传输数据的代码
Nov 13 PHP
php Mysql日期和时间函数集合
Nov 16 PHP
php 实现进制转换(二进制、八进制、十六进制)互相转换实现代码
Oct 22 PHP
PHP通过插入mysql数据来实现多机互锁实例
Nov 05 PHP
THINKPHP项目开发中的日志记录实例分析
Dec 01 PHP
修改Laravel5.3中的路由文件与路径
Aug 10 PHP
用php+ajax新建流程(请假、进货、出货等)
Jun 11 PHP
PHP性能测试工具xhprof安装与使用方法详解
Apr 29 PHP
php 使用ActiveMQ发送消息,与处理消息操作示例
Feb 23 PHP
tp5.1 框架join方法用法实例分析
May 26 PHP
PHP论坛实现积分系统的思路代码详解
Jun 01 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
《星际争霸2》终章已出 RTS时代宣告终结
2017/02/07 星际争霸
英雄试炼之肉山谷—引领RPG新潮流
2020/04/20 DOTA
php 问卷调查结果统计
2015/10/08 PHP
yii2.0框架实现上传excel文件后导入到数据库的方法示例
2020/04/13 PHP
通过javascript获取iframe里的值示例代码
2013/06/24 Javascript
JavaScript设计模式之工厂方法模式介绍
2014/12/28 Javascript
JavaScript获得url所有参数键值表的方法
2015/03/21 Javascript
JavaScript中的函数嵌套使用
2015/06/04 Javascript
jQuery实现的Div窗口震动效果实例
2015/08/07 Javascript
JavaScript判断变量是否为数组的方法(Array)
2016/02/24 Javascript
javascript的几种继承方法介绍
2016/03/22 Javascript
AngularJS基础 ng-keydown 指令简单示例
2016/08/02 Javascript
node.js中EJS 模板快速入门教程
2017/05/08 Javascript
JavaScript方法_动力节点Java学院整理
2017/06/28 Javascript
JavaScript中的FileReader图片预览上传功能实现代码
2017/07/24 Javascript
JS+canvas动态绘制饼图的方法示例
2017/09/12 Javascript
快速将Vue项目升级到webpack3的方法步骤
2017/09/14 Javascript
npm 更改默认全局路径以及国内镜像的方法
2018/05/16 Javascript
JS实现将二维数组转为json格式字符串操作示例
2018/07/12 Javascript
Vue 动态路由的实现及 Springsecurity 按钮级别的权限控制
2019/09/05 Javascript
JavaScript 作用域scope简单汇总
2019/10/23 Javascript
vue+ESLint 配置保存 自动格式化代码
2020/03/17 Javascript
[25:59]Newbee vs TNC 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
Python中如何优雅的合并两个字典(dict)方法示例
2017/08/09 Python
pyqt5自定义信号实例解析
2018/01/31 Python
解读python如何实现决策树算法
2018/10/11 Python
PyTorch使用cpu加载模型运算方式
2020/01/13 Python
罗德与泰勒百货官网:Lord & Taylor
2016/08/12 全球购物
加拿大时装零售商:Influence U
2018/12/22 全球购物
IdealFit官方网站:女性蛋白质、补充剂和运动服装
2019/03/24 全球购物
英国哈罗德园艺:Harrod Horticultural
2020/03/31 全球购物
数控专业毕业生求职信范文
2013/09/21 职场文书
2014年度个人工作总结范文
2015/03/09 职场文书
大学生志愿者心得体会
2016/01/15 职场文书
Python使用scapy模块发包收包
2021/05/07 Python
spring注解 @PropertySource配置数据源全流程
2022/03/25 Java/Android