簡體   English   中英

從服務器到AngularJS客戶端的CSRF令牌交換

[英]CSRF token exchange from server to AngularJS client

我很瘋狂,試圖弄清楚如何為我的Web應用程序實現CSRF保護。 我已經閱讀了成千上萬的頁面,但仍無法根據自己的具體情況決定解決方案。

因此,首先,我的Web應用是用Angular編寫的,並靜態部署在Apache服務器上。 它在戰爭中部署在我的服務器上的Java類型的一些服務上,這些服務部署在應用程序服務器上。 兩者都部署在同一域中。 身份驗證后,將在響應中設置常規會話cookie(安全+ HttpOnly)。

現在,我想基於同步器令牌或雙提交cookie模式實現CSRF保護(但是從我看到的第一個來看,這是一個更好的解決方案,因為我可以處理服務器端的狀態)。

我看到的大多數解決方案都建議生成令牌服務器端並將其存儲在cookie中,以便可以在客戶端進行訪問。 使其起作用的約束(我想這是一個很大的約束)是cookie不能為HttpOnly,因為Javascript無法訪問它。 此外,我感覺在一個未完全保護的cookie中共享令牌不是一個好主意。 但這似乎是AngularJS的推薦解決方案...

所以,如果我放棄這個解決方案,我剩下什么呢? 將令牌不是放在cookie中,而是放在響應頭中? 安全嗎? 公開服務以獲取令牌? 似乎實用,但不確定是否是個好主意? 像在OWASP Guard中一樣,公開一個servlet來構建一個提供令牌的Javascript? 還要別的嗎?

編輯:看來Spring打算在HTTP響應中注入令牌名稱和值作為解決方案。

謝謝你的幫助!

  1. CSRF令牌應在每個用戶會話中生成一次。
  2. 它應該存儲在服務器端會話中(對於Java,則為HttpSession)
  3. 客戶端應將令牌作為隱藏參數存儲在瀏覽器的Cookie中,而不是在其中。
  4. 服務器應驗證每個請求的CSRF令牌是否存在,並與會話中存儲的令牌進行比較。

更多詳細信息: https : //www.owasp.org/index.php/Cross-Site_Request_Forgery_(CSRF)_Prevention_Cheat_Sheet

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM