原著:Shaun Clowes <http://www.securereality.com.au/>
翻译:analysist <http://www.nsfocus.com/>
[库文件]
正如我们前面讨论的那样,include()和require()主要是为了支持代码库,因为我们一般是把一些经常使用的函数放到一个独立的文件中,这个独立的文件就是代码库,当需要使用其中的函数时,我们只要把这个代 码库包含到当前的文件中就可以了。
最初,人们开发和发布PHP程序的时候,为了区别代码库和主程序代码,一般是为代码库文件设置一个“.inc”的扩展名,但是他们很快发现这是一个错误,因为这样的文件无法被PHP解释器正确解析为PHP代码。如果我们直接请求服务器上的这种文件时,我们就会得到该文件的源代码,这是因为当把PHP作为Apache的模块使用时,PHP解释器是根据文件的扩展名来决定是否解析为PHP代码的。扩展名是站点管理员指定的,一般是“.php”, “.php3”和“.php4”。如果重要的配置数据被包含在没有合适的扩展名的PHP文件中,那么远程攻击者很容易得到这些信息。
最简单的解决方法就是给每个文件都指定一个PHP文件的扩展名,这样可以很好的防止泄露源代码的问题,但是又产生了新的问题,通过请求这个文件,攻击者可能使本该在上下文环境中运行的代码独立运行,这可能导致前面讨论的全部攻击。
下面是一个很明显的例子:
In main.php:
<?php
$libDir = "/libdir";
$langDir = "$libdir/languages";
...
include("$libdir/loadlanguage.php":
?>
In libdir/loadlanguage.php:
<?php
...
include("$langDir/$userLang");
?>
当“libdir/loadlanguage.php”被“main.php”调用时是相当安全的,但是因为“libdir/loadlanguage”具有“.php”的扩展名,因此远程攻击者可以直接请求这个文件,并且可以任意指定“$langDir”和“$userLang”的值。
正文:http://www.qqread.com/php/s821745010.html相关专题
- DoS 拒绝服务攻击专题 (1226篇文章)
- 脚本攻击和防范 (2370篇文章)
- DDoS攻击防御与分析 (1493篇文章)
- ARP攻击防范与解决方案 (1714篇文章)
- PHP开发应用手册 (2953篇文章)
- 漏洞专区 (1754篇文章)
- PHP安全篇 (100篇文章)
- 使用PHP 5.2 中新的内存管理器 (0次浏览)
- 实例:PHP判断用户是否正确登录转到欢迎界面 (0次浏览)
- 入门:学习掌握PHP的编程语句 (0次浏览)
- 关于PHP的前途 (0次浏览)
- 分析PHP应用程序以查找、诊断和加速运行缓慢的 (0次浏览)
- 动态语言崛起 Delphi For PHP横空出世 (0次浏览)
- Classes and Objects in PHP5 (0次浏览)
- apache 2.2.2 + PHP5.1.4 不能运行的解决办法 (0次浏览)
- Zeus+php+Zend Optimizer安装指南 (0次浏览)
- Windows下的PHP5.0安装配置详解 (0次浏览)



