我剛剛在CSRF上看過Doctype's集。CSRF和不斷變化的標記
其中他們說最好的CSRF預防措施是從某些用戶唯一數據(例如散列會話ID)創建一個令牌,然後將POST與請求一起發佈。
生成一個難以猜測的值(如GUID)並將其作爲會話變量存儲並將其作爲隱藏字段放到頁面中會不太安全?
每次頁面加載時,值都會改變,但POST數據的測試會在這之前發生。
這對我來說似乎同樣安全。我錯了嗎?
我剛剛在CSRF上看過Doctype's集。CSRF和不斷變化的標記
其中他們說最好的CSRF預防措施是從某些用戶唯一數據(例如散列會話ID)創建一個令牌,然後將POST與請求一起發佈。
生成一個難以猜測的值(如GUID)並將其作爲會話變量存儲並將其作爲隱藏字段放到頁面中會不太安全?
每次頁面加載時,值都會改變,但POST數據的測試會在這之前發生。
這對我來說似乎同樣安全。我錯了嗎?
如果令牌來自可能不是有趣的,只要它不是以任何方式猜測或確定。但要小心在每個請求上生成一個新標記,因爲這意味着您的網站無法爲向您的網站打開兩個或多個瀏覽器標籤的用戶使用。通過在用戶會話期間堅持一個令牌值,可以避免這個問題。
更改令牌每個請求可以說是更安全。但罰款可能被認爲太高。就安全性而言,幾乎與任何事情一樣,您經常會發現您必須權衡用戶體驗的難易程度 - 找到一位喜歡CAPTCHA的用戶!爲您的應用程序和用戶找到合適的平衡點非常重要,既要考慮您的安全性,又要考慮您的可用性。
有一個關於CSRF一些良好的閱讀(和更多)在在Open Web Application Security Project
,如果你有一個令牌保護的頁面上只有一個跨站點腳本漏洞,那麼你的CSRF令牌的同時也要記住現在沒用了。另見OWASP XSS (Cross Site Scripting) Prevention Cheat Sheet。
我沒有多少標籤。謝謝Cheekysoft! –
可能的重複:http://stackoverflow.com/questions/2250263/csrf-protection-by-storing-nonce-in-session-variable-and-form – Marius
謝謝,馬呂斯。我在尋找時沒有發現。 –