JWT和CSRF的区别

Cac*_*ano 3 csrf jwt http-token-authentication

我一直在阅读有关JWT的内容,据我了解,它是服务器在用户登录后发送的令牌,用户将必须在以后所有http请求中发送该令牌,这为服务器验证用户提供了一种无状态方式请求。现在我不明白的是,如果jwt在标头中发送并仅标记为http,为什么还需要一个csrf令牌来防止csrf攻击?我的理解是jwt和csrf令牌都是与用户绑定的令牌,从我的理解来看,jwt可以满足两个目的吗?我知道使用csrf令牌,因此不会接受来自其他站点的http请求,而jwt怎么不能做到这一点?什么将csrf令牌与jwt令牌分开以实现这种差异?我一直在阅读有关jwt和csrf令牌以及双提交方法的文章,

ped*_*ofb 5

基于cookie中存储的令牌(JWT或随机令牌)的身份验证系统容易受到CSRF攻击,因为cookie会在每次请求中自动发送到服务器,并且攻击者可能会建立指向您站点的有害URL链接。

https://yoursite.com/delete?something=1
Run Code Online (Sandbox Code Playgroud)

为了保护您的网站,需要使用CSRF令牌,您的应用程序必须在以下请求中(而不是在Cookie中)发送该CSRF令牌。

或者,您可以将JWT存储在localStorage其中并将其发送到Authorization标头中,然后保护您的站点不受CSRF的影响,但是它可能容易受到XSS攻击。始终考虑您选择的技术解决方案的安全性注意事项

  • 为什么将 JWT 存储在 localStorage 中可能容易受到 XSS 攻击?你能解释一下吗?@pedrofb (4认同)
  • IMO,您提供的关于“为什么在本地存储中存储 JWT 可能容易受到 XSS 攻击”的文章采取了相反的观点。它表示,即使您将令牌存储在 cookie 中,攻击者也可以执行此操作 `onerror="fetch("https://localhost:3000/buy-product?prodid=abc", { credential: "include", method: " POST" })'` 他们并不关心你的令牌。至于“..并将其发送到他自己的服务器” - 他们在他们的服务器上获得令牌后会做什么?在某些网站上访问你的网站用它来修改状态端点。这只是上述方法的一个额外步骤。 (2认同)