2009-02-05 73 views
7

在asp.net中,我實現了一個IHttpModule來緩解CSRF攻擊。它向GET響應html注入一個帶有asp.net SessionID的隱藏表單參數。然後在POST上檢查以確保隱藏參數的值與當前SessionID匹配。據我所知,獲取SessionID值的唯一方法是從cookie中獲取,該cookie無法被惡意站點讀取或確定。有什麼我可以忽略的嗎?CSRF驗證令牌:會話ID安全嗎?

回答

8

這種方法是正確的。您需要確保通過GET操作提供的所有操作都是「安全的」(無論如何,這是最佳實踐),因爲您只將XSRF保護應用於POST。

對於額外的保險,您也可以在GET上使用它(通過爲所有鏈接添加URL參數,並在每個GET請求中檢查它),但這很麻煩。

如果您是偏執偏執的人,您可以爲替代ID選擇一個不同的隨機數。即使瀏覽器錯誤地將您的會話cookie訪問到其他網站上的某些敵對Javascript,也可以保護您。創建會話時,選擇另一個大的隨機數並將其存儲在會話中。

+0

我現在可能不會擔心GET,因爲http無法改變狀態(但顯然可能)。只要我們保持這個慣例/標準,我們應該沒問題。我可能會考慮使用SessionID以外的值來提供額外的安全性,謝謝。 – ironsam 2009-02-06 18:46:31

6

理想情況下,你會想使用會話id以外的東西,但基本上就是這樣。 OWASP建議使用存儲在用戶會話中的隨機表單元素名稱。這樣攻擊者甚至不能僞造正確的隱藏域。

http://www.owasp.org/index.php/Top_10_2007-A5#Protection

+0

隨機化表單元素名稱是一個有趣的想法。感謝您的鏈接。 – ironsam 2009-02-06 18:42:21