11

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

有没有办法将 IIS 配置为返回“404 - 未找到”错误而不是目录浏览尝试的“403”?

这是一个 asp.net 网络表单站点。

我们网站的安全扫描发现返回“403”可能有助于恶意人员映射我们的网站;以前没有想到这一点,但我不得不承认这是有道理的。

4

4 回答 4

10

如果您使用的是 ASP.Net MVC,请将以下处理程序添加到 web.config

<system.webServer>
  <handlers>
    <add name="StopDirectoryBrowsing" path="*." resourceType="Directory" verb="*" 
         preCondition="integratedMode" type="System.Web.HttpNotFoundHandler" />
  </handlers>
<system.webServer>
于 2017-04-18T13:19:33.400 回答
3

在 IIS(7 及更高版本)中,转到请求过滤,有一个名为 Hidden Segments 的选项卡。您只需添加要隐藏的目录名称,它现在将返回 404。

于 2014-09-04T16:49:01.400 回答
3

对我们有用的解决方案(IIS7):

  1. 禁用目录浏览=> 403
  2. 创建一个默认文档(default.htm 或配置的任何默认文件名)=> 200
  3. 将默认文档的文件属性设置为隐藏 => 404
于 2019-04-25T14:20:28.050 回答
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 中的“位置”选项卡来允许通过覆盖默认图像处理程序来提供图像,但我不想在兔子洞里走得太远。

于 2013-09-17T13:34:02.307 回答