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

时间:2012-01-17 12:04:08

标签: c# .net authentication iis-7 integrated-pipeline-mode

我在IIS7上有一个以集成模式运行的站点,并且已经更改了web.config,因此对静态文件进行了身份验证。我想解决的是当一个不存在的文件的请求进入时,它仍然通过.NET身份验证管道,我通过调试Begin_Request()方法看到请求是针对/login.aspx?returnurl=filenotfound .js(在这里解释)。

在身份验证开始之前,有没有人知道如何捕获并返回404?

由于

2 个答案:

答案 0 :(得分:4)

我的主要建议是;不。

如果您需要对某些资源进行身份验证,那么您可能会隐藏某些内容。当你有隐藏的东西时,你应该注意你所揭示的内容,当你对一个有文件的资源给出不同的回应时,你会发现一些东西。

这是一个主要的安全漏洞吗?我不能说,但它足以向攻击者透露一些东西。这肯定是攻击面的扩大,所以你有两种选择。

  1. 进行艰苦的分析,以证明哪些URI映射到文件以及哪些URI不对攻击者有任何益处。
  2. 要求对请求进行身份验证,即使它只会为经过身份验证的用户提供404.
  3. 后者更容易,更不容易出错。

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

答案 1 :(得分:0)

您可以将404s映射到应用程序级别的* .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