【问题标题】:CSRF protection in a angular SPA using Double Submit cookie使用双重提交 cookie 的角度 SPA 中的 CSRF 保护
【发布时间】:2017-04-25 04:30:28
【问题描述】:

我们正在努力尝试使用 AngularJS 和 Restful 服务在 SPA 中实现 CSRF 保护。

场景: 1. 创建用户登录 JWT,其中包含 CSRF 令牌作为有效负载的一部分。

  1. JWT 被放入 HTTP Only Secure cookie 并在响应标头上发回

  2. 另外,相同的 CSRF Token 在响应中被发回。

  3. javascript(角度)代码将 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 令牌不同步?

附:我理解承诺等的概念。

底线是我希望对 API 的每个请求在正文中都有一个 CSRF 令牌,该令牌将与 Header/Cookie/JWT 中的 CSRF 令牌匹配。

【问题讨论】:

    标签: angularjs rest security jwt csrf


    【解决方案1】:

    是的,根据我过去的经验,它有时会发生,导致难以捕捉错误。

    您可以通过使用多个令牌并接受每个令牌等来解决此问题,以克服时间问题,但这将非常复杂,复杂性是安全性的敌人。

    但是,您可以只为用户会话使用相同的 CSRF 令牌。如果令牌中有足够的熵(即足够长),攻击者仍然无法成功猜测它,因此您不必为每个请求生成一个新的。这解决了所有相关问题,同时非常简单且相当安全。 OWASP also states(中间某处)这已经足够了。

    【讨论】:

      猜你喜欢
      • 2015-11-20
      • 2015-08-17
      • 2012-07-16
      • 2013-07-20
      • 1970-01-01
      • 2019-07-01
      • 1970-01-01
      • 2019-11-29
      相关资源
      最近更新 更多