我们正在努力尝试使用AngularJS和Restful服务在SPA中实施CSRF保护。
方案: 1.创建用户登录JWT,其中包含CSRF令牌作为有效负载的一部分。
JWT被放入HTTP Only Secure cookie并在回复标题上发回
此外,响应中会发回相同的CSRF令牌。
javascript(angular)代码将CSRF令牌放入$ rootScope
用户/程序无论如何......请求受保护的api。在请求中从$ rootScope发送CSRF令牌。
Cookie会随着请求一起返回。
服务器查看cookie,解压缩JWT中的csrf令牌,将CSRF令牌与请求正文中的令牌进行比较。
问题:如果我在很短的时间内(亚秒级)有很多请求来自客户端(可能使用拦截器),它从$ rootScope获取CSRF令牌。我的请求中的csrf令牌是否会与Header / Cookie / JWT中的CSRF令牌不同步?
P.S。我理解承诺等的概念。
最重要的是,我希望API的每个请求都在主体中具有一个CSRF令牌,该令牌将与Header / Cookie / JWT中的CSRF令牌相匹配。
答案 0 :(得分:0)
是的,可以,根据我过去的经验,它有时会发生,导致难以发现错误。
你可以通过使用多个令牌并接受每个令牌以解决时间问题来解决这个问题,但这将是非常复杂的,复杂性是安全的敌人。
但是,您可以为用户会话使用相同的CSRF令牌。如果令牌中有足够的熵(即它足够长),攻击者成功猜测它仍然是不可行的,因此您不必为每个请求生成新的熵。这解决了所有相关问题,同时它非常简单且相当安全。 OWASP also states(在中间的某个地方),这已经足够了。