Asp.net

ASP.NET 表單身份驗證和持久身份驗證 Cookie 安全性

  • August 3, 2012

當我們在任何 ASP.NET 框架(ASP.NET MVC、Web 窗體等)中使用 ASP.NET 表單身份驗證時,我們會將身份驗證 cookie 持久保存在客戶端的瀏覽器中。作為最佳實踐,我們將 cookie 設置為 HttpOnly 且安全。我們還通過 SSL 進行所有交易。無論我們使用什麼樣的機制來驗證使用者(OAuth、ASP.NET Membership Provider 等),我們仍然需要持久化驗證以獲得更好的使用者體驗。

有了所有這些,我假設有人仍然可以從客戶端瀏覽器中獲取 cookie 並使用這些 auth cookie 值發出請求。伺服器無法檢測到這一點,我們會將受保護的數據提供給其他人。

一個想法是,我想降低這裡的風險是每次當她/他嘗試採取一些嚴肅的行動(例如更改電子郵件地址,訪問個人資料資訊等)時詢問客戶的密碼,但這並不能解決任何事情,對客戶來說都可能很煩人。

對於此類問題,您是否有任何積極遵循的方法?或者在客戶端瀏覽器中保持身份驗證的最佳方法是什麼?

你幾乎做的一切都是正確的。

如果您使用的是會員提供程序,那麼 cookie 將被標記為僅 HTTP(如您所說),因此無法通過客戶端腳本(例如惡意 XSS)訪問它。

如果您已將 cookie 標記為安全,那麼我假設您已將表單身份驗證上的“RequireSSL”標誌設置為 true。通過這樣做,cookie 不會在任何不通過 HTTPS 發出的請求中發送到伺服器,因此即使您不小心插入了 HTTP 請求(如果它的內容嵌入在瀏覽器上,瀏覽器應該警告使用者無論如何HTTPS 頁面),cookie 將不會被發送。

您唯一可以做的另一件事——除了你所擁有的東西之外,這並不能提供太多的防禦,但這是一個很好的做法——也是使用 HSTS。我在OWASP Top 10 for .NET 開發人員第 9 部分中談到了這一點:傳輸層保護不足作為確保請求繼續通過安全通道發送的附加方法。

除了對會員提供商進行一些認真的重新設計之外,您真的無能為力。您可以將會話綁定到一個 IP,並且如果它發生變化則不接受請求,但這可能會導致問題(即 IP 發生變化並且不能保護您免受同一地址上的多個人的影響)。您還可以創建瀏覽器的指紋(即在請求標頭中發送的所有內容)並確保後續請求匹配,但我們將在這裡進行非常詳細的介紹。

但歸根結底,安全性應該根據所保護資產的價值和惡意活動的可能性進行調整。你不會說你保護的是什麼,但如果它是一個金融系統,你會比部落格上的一個簡單的評論引擎更努力。

總而言之,看起來您做得很好,只需考慮您在保護的價值背景下實施的措施的適當性。哦 - 如果您使用 SQL 成員資格提供程序進行憑證儲存,請確保您閱讀了我們的密碼散列沒有衣服然後停止這樣做!

引用自:https://stackoverflow.com/questions/11792674