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 自写函数代码 获取关键字 去超链接
Feb 08 PHP
php 日期和时间的处理-郑阿奇(续)
Jul 04 PHP
利用ThinkPHP内置的ThinkAjax实现异步传输技术的实现方法
Dec 19 PHP
PHP对象Object的概念 介绍
Jun 14 PHP
php中数组首字符过滤功能代码
Jul 31 PHP
Window 7/XP 安装Apache 2.4与PHP 5.4 的过程详解
Jun 02 PHP
ThinkPHP自定义函数解决模板标签加减运算的方法
Jul 03 PHP
php倒计时出现-0情况的解决方法
Jul 28 PHP
一键生成各种尺寸Icon的php脚本(实例)
Feb 08 PHP
postman的安装与使用方法(模拟Get和Post请求)
Aug 06 PHP
PHP进阶学习之类的自动加载机制原理分析
Jun 18 PHP
基于PHP实现邮箱验证激活过程详解
Oct 28 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
PDO防注入原理分析以及注意事项
2015/02/25 PHP
Nginx服务器上安装并配置PHPMyAdmin的教程
2015/08/18 PHP
Mootools 1.2教程 设置和获取样式表属性
2009/09/15 Javascript
jQuery 行背景颜色的交替显示(隔行变色)实现代码
2009/12/13 Javascript
IE event.srcElement和FF event.target 功能比较
2010/03/01 Javascript
JavaScript中Cookie操作实例
2015/01/09 Javascript
JavaScript的设计模式经典之建造者模式
2016/02/24 Javascript
Node.js的Koa框架上手及MySQL操作指南
2016/06/13 Javascript
JavaScript比较当前时间是否在指定时间段内的方法
2016/08/02 Javascript
Javascript数组中push方法用法分析
2016/10/31 Javascript
常用jQuery选择器汇总
2017/02/02 Javascript
AnglarJs中的上拉加载实现代码
2018/02/08 Javascript
vue2.0+koa2+mongodb实现注册登录
2018/04/10 Javascript
Vuex的actions属性的具体使用
2019/04/14 Javascript
layui表单提交到后台自动封装到实体类的方法
2019/09/12 Javascript
Nodejs文件上传、监听上传进度的代码
2020/03/27 NodeJs
[02:47]DOTA2英雄基础教程 野性怒吼兽王
2013/12/05 DOTA
pygame加载中文名mp3文件出现error
2017/03/31 Python
python dataframe向下向上填充,fillna和ffill的方法
2018/11/28 Python
python3使用QQ邮箱发送邮件
2020/05/20 Python
Windows下实现将Pascal VOC转化为TFRecords
2020/02/17 Python
python logging通过json文件配置的步骤
2020/04/27 Python
Python Django form 组件动态从数据库取choices数据实例
2020/05/19 Python
HTML5 WebGL 实现民航客机飞行监控系统
2019/07/25 HTML / CSS
临床医学专业个人的自我评价
2013/09/27 职场文书
日语专业个人的求职信
2013/12/03 职场文书
暑期社会实践学生的自我评价
2014/01/09 职场文书
关于母亲节的感言
2014/02/04 职场文书
婚纱摄影师求职信
2014/03/07 职场文书
总经理助理岗位职责范本
2014/07/20 职场文书
法人授权委托书公证范本
2014/09/14 职场文书
人事专员岗位职责
2015/02/03 职场文书
学校百日安全活动总结
2015/05/07 职场文书
导游词之西安骊山
2019/12/20 职场文书
解决python存数据库速度太慢的问题
2021/04/23 Python
一篇文章弄懂Python关键字、标识符和变量
2021/07/15 Python