在IIS(6或7)中,当禁用“目录浏览”时,如果IIS检测到尝试浏览目录(例如“ http://mydomain.com/folder ”),则会返回“403 – 禁止”错误。
有什么办法来configurationIIS返回一个“404 – 没有find”的错误,而不是“403”的目录浏览企图? 我们网站的安全扫描指出,返回“403”可能有助于恶意人员映射我们的网站; 之前没有想过,但我不得不承认这是有道理的。
这是一个asp.net webforms网站。
这个问题已经被问到了( 用404replaceIIS 403的目录列表 ),但唯一的发布的答案是不正确的。 添加自定义错误页面不起作用。
我找不到configurationIIS的方法,但是我find了使用asp.net通用处理程序的解决方法( http://forums.asp.net/p/1478217/3453189.aspx ,向下滚动到gvlahakis的答案) 。
首先,创build一个返回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中的“位置”选项卡,以允许通过覆盖默认image processing程序来提供图像,但是我不希望在兔子洞中走得太远。