当前位置: 首页 > 知识库问答 >
问题:

为什么要将刷新令牌存储在仅 HTTP 的 cookie 中以防止 CSRF 攻击?

史英飙
2023-03-14

我刚刚读了一篇文章

https://hasura . io/blog/best-of-practices-of-use-jwt-with-graph QL/

总之,他们建议将JWT Access Token存储在内存中(例如在JavaScript中作为变量),并在HTTP-唯一Cookie中刷新Token。

他们说:

但是,通过通过刷新令牌间接地保持会话,我们防止了JWT令牌可能存在的直接CSRF漏洞。

但是它是否将刷新令牌存储在仅限HTTP的cookie中,仍然容易受到CSRF攻击?例如,evilsite.com可以向 /refreshtokenendpoint发出请求以获取新的JWT访问令牌。我对仅限HTTP的cookie的理解是,cookie不能从JavaScript中读取,但每当发出HTTP请求时,它就会自动发送,就像evilsite.com一样。(如果我错了,请纠正我)。

共有1个答案

阴凯歌
2023-03-14

如果谨慎使用,刷新cookie中的令牌和内存中的访问令牌可能是一个很好的模型。希望在BFF-TMI等标准中提供一些更好的指导。

cookie应该具有这些属性,而SameSite属性意味着evilsite不能发送它,因此从CSRF的角度来看它是好的。

  • 仅HTTP
  • 安全
  • AES256加密
  • 同一个站点=严格

OWASP的CSRF指南似乎建议同时使用SameSite和CSRF令牌作为首选选项。

出于兴趣,下面是我目前如何在一个SPA代码示例中实现一些东西——如果借鉴以下内容有用的话:

  • 水疗授权代码
  • 后端 API OAuth 代码

随着这方面指导的发展,我可能会改变我的想法。

高安全选项?

目前的共识是,在安全方面,以下选项是首选的,尽管我希望风险和缓解措施在未来一年得到更好的记录:

  • 将访问令牌完全排除在浏览器之外
  • 通过“后端对前端”代理所有API调用
  • 看看这段2021的视频吧

然而,这个选项可能会在某些领域增加复杂性,也可能限制某些场景中的功能。

与安全性通常的情况一样,需要权衡其他因素,选择的解决方案可能取决于数据敏感性和利益相关者关心的内容。

 类似资料:
  • 在处理基于浏览器的应用程序时,关于安全存储JWT令牌的主题已经提出了很多问题。大家一致认为,应该使用仅限http的安全cookie。然而,当涉及短期访问令牌和长期刷新令牌时,存储JWT令牌似乎存在许多变化。 我发现了以下变化: 1.仅将JWT访问令牌和刷新令牌存储在http安全cookie中 赞成的意见: 无法从Javascript访问访问令牌和刷新令牌 欺骗: 引入CSRF漏洞,因此也必须添加C

  • 我读过关于CSRF和不可预测的同步令牌模式是如何用来防止它的。我不太明白它是如何工作的。 让我们以这个场景为例: 用户使用以下表单登录到站点: 服务器还将令牌存储在会话中。发送请求时,它将表单数据中的令牌与会话中的令牌进行比较。 当黑客可以编写JavaScript代码时,如何防止CSRF: 发送GET请求到站点 接收包含请求表单的html文本。 在html文本中搜索CSRF令牌。 使用该令牌发出恶

  • 使用刷新令牌可以缓解CSRF攻击。第一条规定: 刷新令牌由auth服务器作为HttpOnly cookie发送到客户端,并由浏览器在/refresh_token API调用中自动发送。因为客户端Javascript不能读取或窃取HttpOnly cookie,所以这比将其作为普通cookie或在LocalStorage中持久化要好一些。这种方法也可以免受CSRF攻击,因为即使表单提交攻击可以调用/

  • 我正在AngularJS SPA中使用资源所有者密码凭证OAuth 2.0流。有几篇文章(这里,这里…)这个问题的答案解释了我们不应该将刷新令牌存储在(web)客户端(LocalStorage)上,而是将它们加密存储在HttpOnly Cookie中,并使用代理API实现对refreh令牌的解密,从而将其转发给安全令牌服务。 大多数文章都暗示我们应该使用一种常见的保护机制来关注CSRF。我想知道单

  • 我正试图了解CSRF的整个问题和预防它的适当方法。(我阅读、理解和同意的参考资料:OWASP CSRF预防备忘单、关于CSRF的问题。) 根据我的理解,CSRF的漏洞是由以下假设引起的:(从Web服务器的角度来看)传入HTTP请求中的有效会话cookie反映了经过身份验证的用户的意愿。但是源域的所有cookie都是由浏览器神奇地附加到请求上的,因此服务器实际上可以从请求中存在有效会话cookie推

  • 我想从Stormpath帖子中对JWT令牌和CSRF提出疑问,这些令牌和CSRF解释了将JWT存储在localStorage或Cookie中的优缺点。 [...] 如果您使用JS从cookie中读取值,这意味着您不能在cookie上设置Httponly标志,因此现在站点上的任何JS都可以读取它,从而使其与在localStorage中存储内容的安全级别完全相同。 我试图理解为什么他们建议将xsrfT