php inc文件的风险分析

发布时间:2020-03-07编辑:脚本学堂
本文介绍下,在php编程中使用inc扩展名文件的常见风险与注意事项,感兴趣的朋友可以参考下。

本节内容:
php inc文件的风险

有时,在php编程中为了方便,会用一个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就可以了。