我瘋了,試圖找出如何爲我的Web應用實現CSRF保護。我已經閱讀了大量的頁面,但仍不能決定在我的特定環境中的解決方案。從服務器到AngularJS客戶端的CSRF令牌交換
因此,首先我的Web應用程序是用Angular編寫的,靜態部署在Apache服務器上。它調用我的服務器上的一些服務,Java類型,部署在應用程序服務器上的一場戰爭中。他們都部署在同一個域中。認證後,通常的會話cookie(secure + HttpOnly)在響應中設置。
現在,我想實現一個基於同步令牌或雙提交cookie模式(但從我看到的第一個更好的解決方案,因爲我可以處理服務器端的狀態)的CSRF保護。
我看到的大多數解決方案都建議生成令牌服務器端並將其存儲在cookie中,以便可以在客戶端訪問它。這個工作的約束,我認爲它是一個很大的問題,就是這個cookie不能是HttpOnly,因爲Javascript不能訪問它。此外,我有這樣的感覺,即在非完全保護的cookie中共享令牌不是一個好主意。但它似乎是從AngularJS推薦的解決方案...
所以,如果我放棄這個解決方案我留下了什麼? 將令牌不放在cookie中,而是放在響應頭中?它安全嗎? 公開服務來獲取令牌?看起來很實用但不確定它是否是一個好主意? 公開一個servlet來構建一個Javascript來提供令牌,就像在OWASP Guard中一樣? 還有什麼?
編輯:它似乎是Spring的注入的HTTP響應中的令牌名稱和值作爲解決方案。
感謝您的幫助!
是,所有這一切都清楚了。我錯過了如何以安全和乾淨的方式將在服務器端生成的cookie傳輸到客戶端 – Xendar
Java EE應用程序將令牌作爲請求屬性傳遞迴客戶端。在AngularJS客戶端的情況下,我假設您可以使用JSON傳遞令牌 – Vel
您的意思是,作爲登錄響應的一部分? – Xendar