是否有必要为每个请求/响应更新JWT令牌中的CSRF令牌?

问题描述 投票:-1回答:1

我正在使用symfony和JWT令牌开发一个Web应用程序进行身份验证。为了防止XSS,JWT令牌存储在具有HttpOnly属性的cookie中。为了防止CSRF,我使用了随机csrf令牌。此令牌存储在cookie和JWT令牌(加密)中。我想知道的是,是否有必要在每个响应中更新csrf令牌?什么是最好的实施?

这是我的详细设置:

  • 我们有一个单页面应用程序。大多数请求将使用ajax发送。
  • 用户使用POST进行身份验证。
  • 在成功验证后,服务器将生成随机csrf令牌,然后将其存储在cookie(HttpOnly)和JWT有效负载内。在将其存储在JWT有效内容之前,将对csrf令牌进行加密。
  • 编码JWT令牌后,它将存储在cookie中(HttpOnly)
  • Evertime用户请求访问另一个页面时,服务器将在JWT令牌解码时验证cookie dan JWT令牌中的csrf令牌。
  • 不使用LocalStorage,因为它可以通过javascript访问
symfony jwt csrf-protection lexikjwtauthbundle
1个回答
1
投票

通常,无需在每次请求时更新CSRF令牌。

但是,让我们看看你的环境会发生什么:

  • 您将JWT以及CSRF令牌存储在cookie中,
  • 您访问的恶意网站会向您的网站发布带有恶意数据的恶意请求,
  • 您的浏览器使用JWT + CSRF将cookie附加到此请求,
  • 你的安全被打破了。

因此,您不能将CSRF令牌放在cookie中,因为无论您是否更新它都是无用的。

如果您使用“单页面应用程序”,最好在Authorization标头中传递JWT。这使得CSRF攻击变得不可能(注意anohter威胁)。

如果您使用“经典Web应用程序”,最好使用“经典”CSRF令牌和“经典”会话标识符。

© www.soinside.com 2019 - 2024. All rights reserved.