簡體   English   中英

使用雙重提交 cookie 的角度 SPA 中的 CSRF 保護

[英]CSRF protection in a angular SPA using Double Submit cookie

我們正在努力嘗試使用 AngularJS 和 Restful 服務在 SPA 中實現 CSRF 保護。

場景: 1. 用戶登錄 JWT 創建包含 CSRF 令牌作為有效負載的一部分。

  1. JWT 被放入 HTTP Only Secure cookie 並在響應頭上發回

  2. 此外,在響應中發回相同的 CSRF 令牌。

  3. javascript (angular) 代碼將 CSRF 令牌放在 $rootScope 中

  4. 用戶/程序無論如何......請求受保護的api。 從請求中的 $rootScope 發送 CSRF 令牌。

  5. Cookie 與請求一起返回。

  6. 服務器查看 cookie 解包 JWT 中的 csrf 令牌,將 CSRF 令牌與請求正文中的令牌進行比較。

  7. 生成新的 CSRF 令牌...將其放入 jwt,將 jwt 放回 cookie 返回 cookie 以及響應中的 CSRF 令牌。
  8. 客戶端收到響應,將 CSRF 令牌存儲在 $rootScope 中。
  9. 重復

問題:如果我在短時間內(亞秒級)收到來自客戶端(可能使用攔截器)的許多請求,該客戶端從 $rootScope 獲取 CSRF 令牌。 我的請求中的 csrf 令牌是否可能與 Header/Cookie/JWT 中的 CSRF 令牌不同步?

PS我理解承諾等的概念。

最重要的是,我希望對 API 的每個請求在正文中都有一個 CSRF 令牌,該令牌將與 Header/Cookie/JWT 中的 CSRF 令牌相匹配。

是的,它可以,並且根據我過去的經驗,它有時會發生,導致難以捕獲錯誤。

您可以通過使用多個令牌並接受每個令牌等來解決這個問題,以克服時間問題,但這將非常復雜,並且復雜性是安全性的敵人。

但是,您可以只為用戶會話使用相同的 CSRF 令牌。 如果令牌中有足夠的熵(即它足夠長),攻擊者仍然無法成功猜測它,因此您不必為每個請求生成一個新的。 這解決了所有相關問題,同時非常簡單且相當安全。 OWASP 還聲明(在中間的某個地方)這已經足夠好了。

暫無
暫無

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

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