配置 IIS 以对目录浏览尝试返回 404

配置 IIS 以对目录浏览尝试返回 404

在 IIS(6 或 7)中,当目录浏览功能被禁用时,当 IIS 检测到尝试浏览目录(例如“http://mydomain.com/folder“)。

有没有办法配置 IIS,使其在目录浏览尝试时返回“404 - 未找到”错误,而不是“403”?我们网站的安全扫描发现,返回“403”可能有助于恶意人员映射我们的网站;之前没有想到这一点,但我不得不承认这是有道理的。

这是一个 asp.net webforms 网站。

这个问题已经被问过(将 IIS 403 替换为 404 以获取目录列表),但唯一发布的答案不正确。添加自定义错误页面不起作用。

答案1

我找不到配置 IIS 的方法,但找到了一种使用 asp.net 通用处理程序的解决方法(http://forums.asp.net/p/1478217/3453189.aspx,向下滚动到 gvlahakis 的答案)。

首先,创建一个返回 404 的通用处理程序:

public class DirectoryBrowsingAttempt : IHttpHandler
{
    public bool IsReusable {get {return true;}
    public void ProcessRequest(HttpContext context) {context.Response.StatusCode = 404;}
}

其次,在 web.config 中添加标记,将目录浏览尝试指向上述处理程序,每个需要保护的文件夹一个标记,位于 httpHandlers 和 system.webServer 部分。下面的标记保护根目录中名为“js”的文件夹。

<httpHandlers>
  <add verb="*" path="js/*" validate="false" type="MyNameSpace.DirectoryBrowsingAttempt"/>
</httpHandlers>
<system.webServer>
<handlers>
  <add name="NoAccess" verb="*" path="js/*"  preCondition="integratedMode" type="MyNameSpace.DirectoryBrowsingAttempt"/>
</handlers>

此解决方法在 IIS 6 和 IIS 7 中的行为有所不同。例如,我以这种方式保护了包含站点图像的文件夹:IIS 6 仍将此文件夹中包含的图像传送到网页(所需的行为,我只想阻止目录浏览尝试); IIS 7 阻止了它们。

可能有办法使用 web.config 中的“位置”选项卡来通过覆盖默认图像处理程序来提供图像,但我不想深入研究。

相关内容