2012-01-17 13 views
2

我有一個網站在IIS7上以集成模式運行,並更改了web.config,以便對靜態文件進行身份驗證。我想解決的問題是,當一個不存在文件的請求進入時,它仍然通過.NET身份驗證管道,我通過調試Begin_Request()方法看到請求是針對/login.aspx?returnurl=filenotfound .js(在這裏解釋)。避免對404請求靜態文件的集成管道認證

有沒有人有任何提示如何捕捉並返回404身份驗證之前踢?

謝謝

回答

4

我主要的建議是;別。

如果您需要對某些資源進行身份驗證,那麼您大概已經隱藏了一些東西。當你需要隱藏某些東西時,你應該注意你正在泄露的內容,以及何時針對具有該文件的資源提供不同的響應,以及如果你不透露某些內容。

這是一個重大的安全漏洞嗎?我不能說,但它可能足以向攻擊者透露一些東西。這當然和擴大的攻擊面,所以你有兩個選擇。

  1. 做出艱苦的分析,證明哪些URI映射到文件,哪些不是對攻擊者沒有好處。
  2. 需要驗證該請求,即使所有它會給認證的用戶是一個404

後者是更容易和更不容易出錯。

也就是說,有幾種方法可以在ASP.NET中使用集成模式進行身份驗證。你在模塊中處理AuthorizeRequestAuthenticateRequest事件嗎?您可以讓他們檢查是否發生這種情況(檢查URI是否映射到現有文件),如果情況如此,則不發送401。

+0

我會繼續這一點 - 我讀之前的迴應將會是相同的。通過看404,我已經從潛在的攻擊中剔除了一些東西。如果一切都需要本節的認證,那麼該部分應該是'門',而不是基於存在的單個文件。 – Bertie 2012-01-26 12:09:33

+0

**借調:**真的,不要這樣做! – Ben 2012-01-27 11:39:24

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