将IIS配置为对目录浏览尝试返回404

nr9pn0ug  于 2022-11-12  发布在  其他
关注(0)|答案(4)|浏览(210)

在IIS(6或7)中,当禁用目录浏览时,IIS会在检测到浏览目录的尝试时返回“403 -禁止”错误(例如“http://mydomain.com/folder“)。
有没有办法将IIS配置为在目录浏览尝试时返回“404 - Not Found”错误而不是“403”?
这是一个asp.net Web表单站点。
对我们站点的安全扫描发现,返回“403”可能会帮助恶意用户Map我们的站点;我以前没有想到这一点,但我不得不承认这是有道理的。

l0oc07j2

l0oc07j21#

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

<system.webServer>
  <handlers>
    <add name="StopDirectoryBrowsing" path="*." resourceType="Directory" verb="*" 
         preCondition="integratedMode" type="System.Web.HttpNotFoundHandler" />
  </handlers>
</system.webServer>
pgpifvop

pgpifvop2#

适用于我们的解决方案(IIS7):
1.禁用目录浏览=〉403
1.创建默认文档(default.htm或配置的任何默认文件名)=〉200
1.设置默认文档的文件属性为隐藏=〉404

yx2lnoni

yx2lnoni3#

在IIS(7及以上版本)中,进入请求过滤,有一个名为隐藏段的选项卡。你可以只添加你想隐藏的目录的名称,它现在会返回一个404。

but5z9lq

but5z9lq4#

我找不到配置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中的“location”选项卡,通过覆盖默认的图像处理程序来提供图像,但我不想深入到兔子洞那么远的地方。

相关问题