1

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

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

    header('HTTP/1.0 404 Not Found');

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

现在我不知道这些方法中哪种方法最好,htaccess 会阻止所有访问,但是使用假的 404,您甚至看不到有目录。

有没有办法让 .htaccess 的安全性和交付的 404 的良好混淆?

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

4

2 回答 2

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

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

于 2013-02-22T20:18:13.810 回答
0

对此有两种思路。首先,正如@nalply 所说,只是将脚本移出文档根目录。PHP 允许您将文件包含在服务器根目录下,因此它们根本不需要包含您的实际公共内容。在我看来,这是最好的方法

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

deny from all

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

我强烈建议不要使用index.php发送 HTTP 错误标头或显示消息的文件。仅使用此方法,该目录中的其他文件在技术上仍然可以访问。如果有人知道这些文件之一的路径,他们将能够访问它们。

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

于 2013-02-22T21:24:43.510 回答