阻止直接访问php include

时间:2009-08-10 23:48:11

标签: php security http request

我有一个php脚本 PayPal eStores / dl_paycart 但它有PayPal eStores "settings.php" Security Bypass Vulnerability

我想知道我是否可以阻止直接访问php包含文件。

这会有帮助吗?

defined( '_paycart' ) or die( 'Access to this directory is not permitted' );

谢谢

4 个答案:

答案 0 :(得分:1)

我强烈建议找一些新脚本。任何形式的阻挡只是在大坝上伸出一根手指;它不是一个永久的解决方案,最终它会破裂。

如果你真的想使用它,请查看htaccess文件,特别是“订单允许,拒绝”和“拒绝所有人”

答案 1 :(得分:1)

  1. 脚本具有.php扩展名的事实提供了一些保护 - 对该文件的任何http或https调用都将通过Web服务器,该服务器将在提供请求之前执行php。

  2. 我建议将脚本移动到公共Web目录下的目录中,并将.htaccess文件放在该目录中,以阻止所有请求,或者需要密码才能访问它。然后在公共目录中的脚本需要时包含脚本。请参阅Apache's .htaccess Tutorial

答案 2 :(得分:1)

问题在于,如果有人能够使用“包含”并读取代码内容,变量等,这意味着他们已经在同一台服务器上运行,而且有点粗糙,你就是如果他们试图和你一起搞砸那就很难受。

另一方面,如果您希望阻止从远程服务器外部访问该文件,则include调用只能检索将显示给任何外部站点的值(如果问题是,“我是否可以阻止外部站点远程加载此文件“,答案是”通过http.conf和.htaccess文件中的服务器配置“。)

然而,长期和短期是,这不是可以用PHP修复的东西,这是服务器安全问题。

答案 3 :(得分:0)

可能最安全的方式是这样的

$allowed_files = array("/paths/", "/that/", "/are/", "/allowed/");
if(!in_array($_SERVER['PHP_SELF'], $allowed_files))
{
    die("Not Allowed");
}

使用您想要访问的文件填充数组。 (您可能必须在所需的每个页面中访问PHP self并将其复制并粘贴到其中)。这将检查以确保正在执行的文件是允许的页面之一。如果不是脚本就会死掉。

我相信$ _SERVER可能会被改变,但可能不会。这个文件仍然可以使用fopen或file_get_contents获取,如果有人读了它,他们就会知道要改变什么。

但我会预先警告,它并非“完全安全”,因为没有办法让某些东西“完全”安全。