使用404(而不是403)禁用目录列表


9

我已经禁用了目录列表,就像这样...

Options -Indexes

当我尝试访问这样的目录时:-

www.example.com/secret/

我收到403禁止响应。

但是,我想要404 Not Found响应,因此黑客无法轻易猜到我的目录结构。我该怎么做?



我意识到这一点,但是让任何人都容易做到这一点毫无意义,尤其是因为它花了很少的精力来使它变得更难。
Rik Heywood

Answers:


8

在/ secret中启用mod_rewrite和AllowOverride。然后创建.htaccess:

RewriteEngine On
RewriteBase   /secret
RewriteRule   ^$ - [R=404,L]


1

创建一个自定义的403脚本,该脚本返回404错误。

例如,在PHP中:

<?php
header("HTTP/1.0 404 Not Found");
die("<h1>404 Not Found</h1>");
?>

现在将Apache配置为使用此脚本获得403个结果:

ErrorDocument 403 /403.php

无需担心重写,它可以立即在整个服务器上运行。


对于刮刮服务器的人,这是否仍显示为403?
IRGeekSauce

1
否。由于该header()命令,服务器将回答正确的404错误。
Gerald Schneider

-1,因为您的自定义错误消息可能是!=您的服务器错误消息(无论是nging还是apache或其他)。如果无法配置服务器或使用.htaccess文件,则这是最后一种解决方案。此外,此解决方案不会阻止您建立网站,因为您仍然可以从服务器错误消息中区分出此类“自定义错误消息”。
Awaaaaarghhh

0

我停止将目录内容显示为列表并显示404错误的解决方案很简单。在项目的根目录中创建.htaccess文件,并写出应保护的目录。

目录结构

- your_root_directory
  - .htaccess
  - 404.html
  - index.html 
  - app
    - other files I do not want to show
  - models
    - other files I do not want to show

.htaccess

RewriteEngine On
RewriteRule   ^app/ - [R=404,L]
RewriteRule   ^models/ - [R=404,L]

ErrorDocument 404 /your_root_directory/404.html

.htaccess的第二行禁止访问应用程序目录及其所有子目录中的列表项。

.htaccess的第三行禁止访问models目录及其所有子部门中的列表项。

.htaccess行的第四行设置了我们自己的404错误(如果您不想显示apache默认错误)。

使用htaccess时,请记住清除浏览器上的缓存。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.