在IIS(6或7)中,当禁用目录浏览时,IIS在检测到尝试浏览目录时返回“403 - 禁止”错误(例如“http://mydomain.com/folder”)。
有没有办法配置IIS以返回“404 - Not Found”错误而不是“403”用于目录浏览尝试?
这是一个asp.net webforms网站。
我们网站的安全扫描指出,返回“403”可以帮助恶意人员映射我们的网站;以前没想过,但我不得不承认这是有道理的。
答案 0 :(得分:8)
如果您使用的是ASP.Net MVC,请将以下处理程序添加到web.config
中<system.webServer>
<handlers>
<add name="StopDirectoryBrowsing" path="*." resourceType="Directory" verb="*"
preCondition="integratedMode" type="System.Web.HttpNotFoundHandler" />
</handlers>
<system.webServer>
答案 1 :(得分:2)
在IIS(7及更高版本)中,转到“请求过滤”,并且有一个名为“隐藏分段”的选项卡。您只需添加要隐藏的目录名称,它现在将返回404。
答案 2 :(得分: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仍将此文件夹中包含的图像传送到网页(所需行为,I只是想阻止目录浏览尝试); IIS 7阻止了它们。
有可能使用web.config中的“location”选项卡来覆盖默认的图像处理程序来提供图像,但我不想在兔子洞那边走。
答案 3 :(得分:1)
对我们有用的解决方案(IIS7)