避免对静态文件的404请求进行集成管道身份验证



我在IIS7上有一个以集成模式运行的站点,并且已经更改了web.config,以便对静态文件进行身份验证。我想修复的是,当一个不存在的文件的请求传入时,它仍然通过.NET身份验证管道,我通过调试Begin_request()方法看到该请求是为/login.aspx发出的?returnurl=filenotfound.js(此处转述)。

有人知道如何在身份验证生效之前捕获并返回404吗?

感谢

我的主要建议是;不要。

如果您需要对某些资源进行身份验证,那么您可能有需要隐藏的内容。当你有什么要隐瞒的时候,你应该注意你在透露什么,当你对一个有文件的资源和一个没有文件的资源做出不同的回应时,你在透露一些东西。

这是一个主要的安全漏洞吗?我不能说,但这足以向攻击者透露一些信息。这当然是攻击面的扩大,所以你有两个选择。

  1. 进行艰苦的分析,以证明哪些URI映射到文件,哪些没有映射到文件的信息对攻击者没有好处
  2. 要求对请求进行身份验证,即使它只会给经过身份验证的用户一个404

后者更容易出错。

也就是说,有几种方法可以在集成模式的ASP.NET中进行身份验证。您是否在处理AuthorizeRequestAuthenticateRequest事件的模块中执行此操作?你可以让他们检查是否发生了这样的情况(检查URI是否映射到现有文件),如果是这样的话,就不发送401。

您可以在应用程序级别将404映射到*.aspx页面。因此,对不存在的资源的所有请求都将被重新映射到页面,querystring参数将指示不存在资源的名称。假设该页面可以从授权引擎中排除(每个人都可以使用),您可以将处理不同情况的精确逻辑放在该页面上。

    <httpErrors errorMode="Custom">
        <remove statusCode="404" subStatusCode="-1"/>
        <error statusCode="404" prefixLanguageFilePath="" path="/ErrorHandler.aspx" responseMode="ExecuteURL"/>
    </httpErrors>

这样,所有404都被路由到ErrorHandler.aspx?404;theurlofnonexistingresource

最新更新