![配置 IIS 以对目录浏览尝试返回 404](https://linux22.com/image/618022/%E9%85%8D%E7%BD%AE%20IIS%20%E4%BB%A5%E5%AF%B9%E7%9B%AE%E5%BD%95%E6%B5%8F%E8%A7%88%E5%B0%9D%E8%AF%95%E8%BF%94%E5%9B%9E%20404.png)
在 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 中的“位置”选项卡来通过覆盖默认图像处理程序来提供图像,但我不想深入研究。