在 IIS(6 或 7)中,当禁用目录浏览时,当 IIS 检测到尝试浏览目录(例如,“ http://mydomain.com/folder ”)时,它会返回“403 - Forbidden”错误。
有没有办法将 IIS 配置为返回“404 - 未找到”错误而不是目录浏览尝试的“403”?
这是一个 asp.net 网络表单站点。
我们网站的安全扫描发现返回“403”可能有助于恶意人员映射我们的网站;以前没有想到这一点,但我不得不承认这是有道理的。
在 IIS(6 或 7)中,当禁用目录浏览时,当 IIS 检测到尝试浏览目录(例如,“ http://mydomain.com/folder ”)时,它会返回“403 - Forbidden”错误。
有没有办法将 IIS 配置为返回“404 - 未找到”错误而不是目录浏览尝试的“403”?
这是一个 asp.net 网络表单站点。
我们网站的安全扫描发现返回“403”可能有助于恶意人员映射我们的网站;以前没有想到这一点,但我不得不承认这是有道理的。
如果您使用的是 ASP.Net MVC,请将以下处理程序添加到 web.config
<system.webServer>
<handlers>
<add name="StopDirectoryBrowsing" path="*." resourceType="Directory" verb="*"
preCondition="integratedMode" type="System.Web.HttpNotFoundHandler" />
</handlers>
<system.webServer>
在 IIS(7 及更高版本)中,转到请求过滤,有一个名为 Hidden Segments 的选项卡。您只需添加要隐藏的目录名称,它现在将返回 404。
对我们有用的解决方案(IIS7):
我找不到配置 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 中的“位置”选项卡来允许通过覆盖默认图像处理程序来提供图像,但我不想在兔子洞里走得太远。