如何避免 apache2 泄露隐藏目录和/或文件结构

如何避免 apache2 泄露隐藏目录和/或文件结构

当有人取一个被否认存在的 URL,他获得:

Forbidden

You don't have permission to access /admin/admin.php on this server.
Apache/2.2.8 (Ubuntu) PHP/5.2.4-2ubuntu5.9 with Suhosin-Patch Server

当有人访问不存在他将获得:

Not Found

The requested URL /notexisting/notthere.php was not found on this server.
Apache/2.2.8 (Ubuntu) PHP/5.2.4-2ubuntu5.9 with Suhosin-Patch Server 

这样,有人就可以找到某个区域内的目录结构信息,而这些信息实际上并未向公众开放。这是真的吗?

如果我偏执了,我该怎么办?只是好奇。

答案1

您可能可以使用 SetEnvIf 来检查某些内容,例如 Remote_Addr 是否是内部的,然后使用 mod_rewrite 根据环境变量给出 404。

答案2

请注意,这并不一定会告诉他们/admin/admin.php存在。如果/admin被禁止,/admin/notthere.php也会是403 Forbidden。因此,它并没有明确泄露有关目录结构的任何信息。

如果你比较谨慎,你可以创建一个子域名,让根目录受到保护。这样,对于未经授权的用户,任何 URL 都会产生一条403 Forbidden消息

答案3

您可以配置 Apache 对错误的反应方式,例如为每个错误设置一个 ErrorDocument: http://httpd.apache.org/docs/2.0/mod/core.html#errordocument

相关内容