我在IIS7上有一个以集成模式运行的站点,并且已经更改了web.config,因此对静态文件进行了身份验证。我想解决的是当一个不存在的文件的请求进入时,它仍然通过.NET身份验证管道,我通过调试Begin_Request()方法看到请求是针对/login.aspx?returnurl=filenotfound .js(在这里解释)。
在身份验证开始之前,有没有人知道如何捕获并返回404?
由于
答案 0 :(得分:4)
我的主要建议是;不。
如果您需要对某些资源进行身份验证,那么您可能会隐藏某些内容。当你有隐藏的东西时,你应该注意你所揭示的内容,当你对一个有文件的资源给出不同的回应时,你会发现一些东西。
这是一个主要的安全漏洞吗?我不能说,但它足以向攻击者透露一些东西。这肯定是攻击面的扩大,所以你有两种选择。
后者更容易,更不容易出错。
也就是说,有几种方法可以在ASP.NET中使用集成模式进行身份验证。您是否在处理AuthorizeRequest
和AuthenticateRequest
事件的模块中执行此操作?您可以让他们检查是否发生了这种情况(检查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
。