我讀了很多關於Spring Securitys CSRF保護的內容,但我仍然苦苦掙扎。現在的文檔與往常一樣好,但它完全基於您在服務器上呈現html代碼並能夠爲每個表單添加隱藏字段的想法。現在,因爲我使用AngularJS和JavaScript來調用後端,所以這不是一個真正的選擇。REST後端的Spring Security CSRF保護 - 同步器令牌模式傳輸到客戶端
那麼在這種情況下實際獲取Token給客戶端的最佳方式是什麼(Rest Backend/AngularJS前端)? AngularJS似乎已經在$ resource中構建了對CSRF的支持,並期望一個名爲「XSRF-TOKEN」的Cookie來檢索令牌,並在進一步請求中將其作爲http頭「X-XSRF-TOKEN」發送。所以每個請求都會包含http頭以及cookie。現在在服務器端,我可以讀取標題並將其與我存儲在會話中的令牌進行比較。
我有這個問題,它似乎有點複雜。由於登錄本身必須受到保護,因此需要創建一個臨時會話,僅用於CSRF令牌。這真的有必要嗎?
也許這只是一個愚蠢的問題,但爲什麼我不能在客戶端創建一個隨機標記並將其設置爲客戶端的HTTP標頭和Cookie。這與「OWASP double submit cookie」類似,但在客戶端生成令牌。這樣服務器在登錄前不需要進行會話,因爲他可以比較兩個提交的令牌。現在,雖然攻擊者可以發送HTTP標頭,但是根據同源策略,無法讀取或設置cookie,只要數字幾乎不可測,就無法獲得匹配。
現在本能地在客戶端生成一個安全的令牌對我來說似乎很危險,我想我會避免它..但爲什麼?我覺得我錯過了一些東西,當然,SpringSecurity爲什麼在會話中存儲令牌有一個很好的理由,對吧?
請賜教:)
[如何訪問Spring CSRF restful web服務](http://stackoverflow.com/questions/33125598/how-to-access-spring-csrf-restful-web-service)可能有幫助嗎? – holmis83
2周前我已經解決了這個問題,但忘了在這裏提到它。我現在發佈了答案。雖然謝謝! –