-1
在最強烈的CSRF保護之間,存在表單令牌保護。我關於這個方法的問題是關於可用性:如果用戶打開包含表單的多個頁面(使用該表單),則會生成多個表單,但只有最後打開的頁面才能成功發送表單,所有其他表單都會發生錯誤。CSRF保護和可用性
我想2個解決方案:
- 保持一個獨特的令牌會話的所有時間。
- 在會話中存儲所有生成的令牌。
但是:
- 這是比較現實的解決方案,但安全性較差。
- 這會產生很大的資源開銷,因爲用戶可能會打開很多頁面,並且我必須存儲所有生成的令牌。
因此,您是如何解決這個問題的?
PS我正在開發的網站實際上是PHP中的電子商務,儘管匯款將通過外部提供商(如paypal)進行管理,但我認爲正確的做法是爲我的服務提供安全保障。
謝謝SLaks的答案。令牌已存儲在用戶會話中(但我將會話數據存儲在數據庫中)。令牌是隨機生成的字符串,因此實際上無法計算。因此,HMAC Hash的效用是什麼? 保持一個唯一的每個用戶令牌,比每個表單顯示的令牌安全,您不覺得嗎? 「你也可以讓每個用戶的令牌」這個思想確立,否則安全性在哪裏? – Eghes
@Eghes:散列不會很好,但不會造成任何傷害。按用戶來說,我的意思是在令牌中包含一個用戶ID(散列以防止交換),這樣即使攻擊者可以讀取或寫入令牌,他仍然需要獲取該ID。 (這可以更好地使用單獨的ID或GUID,而不用於其他任何內容) – SLaks
好的,謝謝。但是,最後,您是否建議爲所有用戶會話使用單個令牌? – Eghes