如何有效防止目录暴力强制?

时间:2013-02-22 20:12:51

标签: php security .htaccess directory obfuscation

我有一个脚本,主要组件存储在子文件夹中。所有组件只能从作为控制器的index.php访问。在考虑从公共访问/可见性隐藏组件文件夹的方法时,我得到了2.选项:

  1. 在每个目录中使用.htaccess来传递403 Forbidden Error。
  2. 使用以下php脚本和“假”404 HTML消息在每个文件夹中放置一个index.php。

    标题('HTTP / 1.0 404 Not Found');

  3. 我尝试了两种选择并使用OWASP ZAP进行了扫描。对于第一个选项,可以获得脚本的整个结构,因为每个系统文件夹都提供了403。使用第二个选项OWASP无法给我一个脚本文件夹列表,因为404告诉它没有文件夹。

    现在我不知道哪种方法最好,htaccess会阻止所有访问,但是假装404你甚至看不到有一个目录。

    是否有工作可以获得.htaccess的安全性和交付404的漂亮混淆?

    编辑:对不起我忘了提及,由于服务器限制,我无法将组件移到可访问的脚本路径之外!

2 个答案:

答案 0 :(得分:2)

PHP可以包含文档根目录之外的文件。

通常我有这样的设置:

/www/application            - this is the web application root
/www/application/includes   - here you find the components
/www/application/root       - here you place index.php

这样您就不需要禁止您不想访问的文件。

答案 1 :(得分:0)

对此有两种思路。首先,如@nalply所述,只是简单地将脚本移出文档根目录。 PHP允许您包含远至服务器根目录的文件,因此它们不需要与您的实际公共内容一起使用。在我看来,这是最好的方式

第二种方法是使用.htaccess指令。例如,在我运行的特定站点上,我在技术上无法实现第一个选项。因此,我将.htaccess文件放在任何不打算被包含以下代码的公众命中的目录中:

deny from all

这不允许浏览器访问目录中的任何文件,但您仍然可以通过PHP包含这些文件。这将是第二种最佳方式。

我强烈反对使用发送HTTP错误标头的index.php文件或显示消息。仅使用此方法,该目录中的其他文件仍可在技术上访问。如果有人知道其中一个文件的路径,他们就可以访问它们。

TL; DR 将文件放在文档根 的非公共目录中,每个文件都使用.htaccess个文件目录。不要使用index.php文件来阻止目录访问。