我有一个脚本,主要组件存储在子文件夹中。所有组件只能从作为控制器的index.php访问。在考虑从公共访问/可见性隐藏组件文件夹的方法时,我得到了2.选项:
使用以下php脚本和“假”404 HTML消息在每个文件夹中放置一个index.php。
标题('HTTP / 1.0 404 Not Found');
我尝试了两种选择并使用OWASP ZAP进行了扫描。对于第一个选项,可以获得脚本的整个结构,因为每个系统文件夹都提供了403。使用第二个选项OWASP无法给我一个脚本文件夹列表,因为404告诉它没有文件夹。
现在我不知道哪种方法最好,htaccess会阻止所有访问,但是假装404你甚至看不到有一个目录。
是否有工作可以获得.htaccess的安全性和交付404的漂亮混淆?
编辑:对不起我忘了提及,由于服务器限制,我无法将组件移到可访问的脚本路径之外!
答案 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
文件来阻止目录访问。