在PHP中保护包含文件
在任何PHP程序中都包含文件是一种非常普遍的做法,而且并没有什么不同寻常。但是,当用户导航到具有功能的脚本文件时,可能会出现问题,但该脚本文件应包含在较大的程序中。例如,如果您的系统包含一个用于删除某些内容的文件,那么如果该文件本身运行,那么就有可能删除所有内容。
当然,还有其他因素,例如数据库访问,全局变量和会话,可能会导致任何脚本简单地出错而不会引起问题。但是,优良作法是确保任何包含文件仅在包含时才运行,而不是在单独运行时才运行。
下面的一些代码片段可以放在任何包含文件的顶部,以确保它不能在包含之外运行。在此示例中,该文件将称为“test.php”。
if ( preg_match("/test\.php/", $_SERVER['PHP_SELF']) ) { exit; }
如果当前文件名(通过$_SERVER[“PHP_SELF”]找到)不存在,test.php则脚本将直接退出。如果包含该文件,则此$_SERVER将是包含该文件的文件的名称。
可以添加另一个步骤,以确保文件仅包含在正确的文件中。如果$_SERVER[“PHP_SELF”]变量不是search.php,以下代码片段将导致脚本退出。
if ( !preg_match("/search\.php/", $_SERVER['PHP_SELF']) ) { exit; }