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

时间:2013-09-16 14:52:01

标签: asp.net iis

在IIS(6或7)中,当禁用目录浏览时,IIS在检测到尝试浏览目录时返回“403 - 禁止”错误(例如“http://mydomain.com/folder”)。

有没有办法配置IIS以返回“404 - Not Found”错误而不是“403”用于目录浏览尝试?

这是一个asp.net webforms网站。

我们网站的安全扫描指出,返回“403”可以帮助恶意人员映射我们的网站;以前没想过,但我不得不承认这是有道理的。

4 个答案:

答案 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)

  1. 禁用目录浏览=> 403
  2. 创建默认文档(default.htm或配置的任何默认文件名)=> 200
  3. 将默认文档的文件属性设置为hidden => 404