我有一个在 IIS7 上以集成模式运行的站点,并更改了 web.config,以便对静态文件进行身份验证。我想解决的是当一个不存在的文件的请求进来时,它仍然通过.NET 身份验证管道,我通过调试 Begin_Request() 方法看到该请求是针对 /login.aspx?returnurl=filenotfound .js(在这里解释)。
有没有人有任何关于如何在身份验证开始之前捕获和返回 404 的提示?
谢谢
我有一个在 IIS7 上以集成模式运行的站点,并更改了 web.config,以便对静态文件进行身份验证。我想解决的是当一个不存在的文件的请求进来时,它仍然通过.NET 身份验证管道,我通过调试 Begin_Request() 方法看到该请求是针对 /login.aspx?returnurl=filenotfound .js(在这里解释)。
有没有人有任何关于如何在身份验证开始之前捕获和返回 404 的提示?
谢谢
我的主要建议是;不。
如果您需要对某些资源进行身份验证,那么您可能需要隐藏一些东西。当你有一些东西要隐藏时,你应该注意你在揭示什么,当你对一个有文件的资源和一个没有文件的资源给出不同的响应时,你就是在揭示一些东西。
这是一个重大的安全漏洞吗?我不能说,但这可能足以向攻击者透露一些信息。这当然是攻击面的扩大,所以你有两个选择。
后者更容易且不易出错。
也就是说,有几种方法可以在 ASP.NET 中使用集成模式进行身份验证。你是在处理AuthorizeRequest
和AuthenticateRequest
事件的模块中做的吗?您可以让他们检查是否发生了这种情况(检查 URI 是否映射到现有文件),如果是这种情况,则不发送 401。
您可以将 404 映射到应用程序级别的 *.aspx 页面。因此,对不存在资源的所有请求都将重新映射到页面,并且查询字符串参数将指示不存在资源的名称。假设页面可以从授权引擎中排除(对所有人可用),您可以将处理不同情况的精确逻辑放在页面上。
<httpErrors errorMode="Custom">
<remove statusCode="404" subStatusCode="-1"/>
<error statusCode="404" prefixLanguageFilePath="" path="/ErrorHandler.aspx" responseMode="ExecuteURL"/>
</httpErrors>
这样,所有 404 都被路由到ErrorHandler.aspx?404;theurlofnonexistingresource
.