JWT (XSS) 与 Cookie (CSRF)?

JWT (XSS) vs Cookies (CSRF)?

提问人:BooRuleDie 提问时间:10/25/2023 最后编辑:BooRuleDie 更新时间:10/25/2023 访问量:45

问:

我是一家初创公司的 Python 后端开发人员。最近,我被要求为 API 构建身份验证系统,我使用 Python 的 FastAPI 框架实现了一个基于令牌的身份验证机制 (JWT)。然后前端团队让我解释他们应该如何存储令牌,我说他们可以将其存储在本地存储中,因为浏览器没有像 cookie 这样的 JWT 内置功能。但后来我意识到它允许攻击者执行 XSS 到 ATO(帐户接管)攻击。然后,我搜索了一种更安全的方法来存储 JWT,并发现了在 httpOnly cookie 中存储 JWT 的信息。现在,XSS 到 ATO 被阻止了,但现在我需要处理 CSRF 攻击,这没什么大不了的,但是如果我要将 JWT 存储在 cookie 中,那么使用 JWT 有什么意义呢?

在我看来,这里有两个选择:

  1. 使用 JWT,将其存储在本地存储中,并应用强大的 CSP(内容安全策略),因此即使弹出 XSS,攻击者也无法利用该漏洞。
  2. 使用 Cookie 并阻止 CSRF(我认为 referer 标头检查应该足够了,但我也会使用 cookie 属性)。

我应该选择哪个选项,如果您有任何其他想法,请告诉我。

饼干 JWT FASTAPI CSRF XSS

评论

0赞 CBroe 10/25/2023
对于任何事情永远不应该依赖推荐人。
0赞 Chris 10/25/2023
其他外,该答案提供了有关该主题的详细信息。
0赞 Benyamin Jafari 11/3/2023
另一个选项可能是此处解释的用于存储 JWT 令牌的选项。SameSite Cookies

答:

0赞 Tamy Ak 10/25/2023 #1

使用本地存储来保存 JWT 令牌不是安全的方式(XSS 攻击),但将 cookie 与 CSRF 令牌相结合是处理攻击的安全方法。如果您在每次发送到后端时都满足您的请求,您可以看到 CSRF 将发生变化,并且如果您在每个操作上使用验证 CSRF,则将与后端进行检查,这样可以减少漏洞。 这可能有助于您了解 Cookie:https://www.cookiescan.com/what-are-website-cookies-and-where-are-they-stored/#:~:text=Cookies%20are%20usually%20small%20text,directory%20or%20program%20data%20subfolders