JWT和CSRF的差异

JWT和CSRF的差异,jwt,csrf,http-token-authentication,Jwt,Csrf,Http Token Authentication,我一直在读关于JWT的书,据我所知,它是服务器在用户登录后发送的令牌。用户必须将该令牌与所有未来的HTTP请求一起发送。这为服务器创建了一种无状态的方式来验证用户的请求 现在我不明白的是,如果JWT在头中发送并标记为HTTP only,为什么还需要CSRF令牌来防止CSRF攻击?我的理解是,JWT和CSRF令牌都与用户绑定,并且JWT可以同时用于这两个目的 我知道使用CSRF令牌是为了不接受来自其他站点的HTTP请求。JWT如何不实现这一点?是什么将CSRF令牌与JWT令牌区分开来,并允许它实现

我一直在读关于JWT的书,据我所知,它是服务器在用户登录后发送的令牌。用户必须将该令牌与所有未来的HTTP请求一起发送。这为服务器创建了一种无状态的方式来验证用户的请求

现在我不明白的是,如果JWT在头中发送并标记为HTTP only,为什么还需要CSRF令牌来防止CSRF攻击?我的理解是,JWT和CSRF令牌都与用户绑定,并且JWT可以同时用于这两个目的

我知道使用CSRF令牌是为了不接受来自其他站点的HTTP请求。JWT如何不实现这一点?是什么将CSRF令牌与JWT令牌区分开来,并允许它实现这种区别


我一直在阅读关于JWT和CSRF令牌以及double submit方法的文章,但有一些东西我似乎不明白或者我遗漏了。

你所有的问题都与这样一个事实有关,中的CSRF令牌从不包含在cookie中,而JWT令牌可能会在cookie中发送

可以通过以下方式发送JWT令牌:

1-在饼干里

2-在另一种类型的收割台中

3-在标题之外,在某些POST属性中

4-在标头之外,在某些GET参数中(不是很常见)

但是对于无状态身份验证,您必须使用cookie(案例1)

因此,对于无状态身份验证,您倾向于使用JWT令牌进行CSRF。这就是为什么您需要添加一些CSRF缓解机制,基于cookie中未包含的更多信息,或者不仅仅是cookie中包含的


如果您接受实施有状态身份验证,所有这些都不适用。

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

https://yoursite.com/delete?something=1
为了保护您的站点,需要使用CSRF令牌,您的应用程序必须在以下请求中发送该令牌(而不是在cookie中)


或者,您可以将JWT存储在
localStorage
中,并将其发送到
Authorization
头中,这样您的站点就可以免受CSRF的攻击,但它可能容易受到XSS攻击。始终考虑您选择的技术解决方案的安全考虑

我不明白,如果您不将csrf令牌存储在cookie中,那么假设您将其存储在会话存储中,攻击者难道不能简单地读取并发送它吗?此外,在本文中,他们将csrf存储在cookie1)中,攻击者无法读取不同域中的页面数据。这称为
同源
策略。2) 在您的链接中设置了cookie,但cookie是用javascript读取的,并在头中发送(它不是httponly),它不是由浏览器自动发送的,这是CSRF攻击的关键点为什么将JWT存储在localStorage中容易受到XSS攻击?你能解释一下吗@pedrofb@LittleZero,你可以在这里找到一些本地存储漏洞,这里XSS解释了是的,我要进行无状态身份验证,我不明白,如果你不将csrf令牌存储在cookie中,那么假设你将其存储在会话存储中,攻击者难道不能简单地读取并发送它吗?此外,在本文中,他们将csrf存储在cookie中。在本文中,他们完全按照我所说的做:他们使用基于某些信息的csrf缓解机制,而不仅仅是包含在cookie中。请再次阅读本文:JS将其复制到自定义HTTP头(X-Csrf-Token)中。关于会话存储,如果您知道攻击者如何简单地读取它,那么您就有一个大问题:您的应用程序受到XSS缺陷的影响。如果是这种情况,您应该缓解此缺陷,但这是另一个故事。我是否正确地断言,一旦您存在XSS漏洞,基于令牌的CSRF保护是一个相当低的关注度,因为正确设计的XSS攻击可以很容易地为其恶意请求获取适当的CSRF令牌,并且无论如何也不会提供很好的保护?