我有一個網站在IIS7上以集成模式運行,並更改了web.config,以便對靜態文件進行身份驗證。我想解決的問題是,當一個不存在文件的請求進入時,它仍然通過.NET身份驗證管道,我通過調試Begin_Request()方法看到請求是針對/login.aspx?returnurl=filenotfound .js(在這裏解釋)。避免對404請求靜態文件的集成管道認證
有沒有人有任何提示如何捕捉並返回404身份驗證之前踢?
謝謝
我有一個網站在IIS7上以集成模式運行,並更改了web.config,以便對靜態文件進行身份驗證。我想解決的問題是,當一個不存在文件的請求進入時,它仍然通過.NET身份驗證管道,我通過調試Begin_Request()方法看到請求是針對/login.aspx?returnurl=filenotfound .js(在這裏解釋)。避免對404請求靜態文件的集成管道認證
有沒有人有任何提示如何捕捉並返回404身份驗證之前踢?
謝謝
我主要的建議是;別。
如果您需要對某些資源進行身份驗證,那麼您大概已經隱藏了一些東西。當你需要隱藏某些東西時,你應該注意你正在泄露的內容,以及何時針對具有該文件的資源提供不同的響應,以及如果你不透露某些內容。
這是一個重大的安全漏洞嗎?我不能說,但它可能足以向攻擊者透露一些東西。這當然和擴大的攻擊面,所以你有兩個選擇。
後者是更容易和更不容易出錯。
也就是說,有幾種方法可以在ASP.NET中使用集成模式進行身份驗證。你在模塊中處理AuthorizeRequest
和AuthenticateRequest
事件嗎?您可以讓他們檢查是否發生這種情況(檢查URI是否映射到現有文件),如果情況如此,則不發送401。
您可能會將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
。
我會繼續這一點 - 我讀之前的迴應將會是相同的。通過看404,我已經從潛在的攻擊中剔除了一些東西。如果一切都需要本節的認證,那麼該部分應該是'門',而不是基於存在的單個文件。 – Bertie 2012-01-26 12:09:33
**借調:**真的,不要這樣做! – Ben 2012-01-27 11:39:24