如何在内存中存储JWT不受XSS攻击?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在内存中存储JWT不受XSS攻击?相关的知识,希望对你有一定的参考价值。

我正在关注此tutorial on JWT using GraphQL

在该教程中,

如何将其保存在Cookie中?

在客户端上创建cookie以保存JWT也会很容易 XSS。如果可以从客户端之外的javascript上读取它 应用-它可能被盗。您可能会认为HttpOnly cookie(由 服务器而不是客户端)会有所帮助,但cookie是 容易受到CSRF攻击。重要的是要注意HttpOnly和 明智的CORS政策无法阻止CSRF表单提交攻击, 使用Cookie需要适当的CSRF缓解策略。

因此,作者将JWT保存在内存中(变量)。

但是我在SO post上读到javascript可以读取其他变量。

XSS当攻击者可以在网站上运行Javascript时发生。如果存在XSS漏洞,则攻击者可以读取/设置cookie,通过读取javascript变量将用户的详细信息传输到攻击者服务器。因此,如何将JWT保存在内存中比存储在本地存储或cookie中更安全?

我想念什么吗? (可能是因为我已经搜索了此内容,但在互联网上却一无所获。)

答案

在内存中存储JWT仍然使它们容易受到XSS的攻击,但是这使得检索令牌更加困难。

假设您在代码中使用了恶意库。如果将令牌存储在localStorage中,则该库可能会将其中的所有内容都作哑处理并将其发送到其他地方。该攻击将在将令牌存储在localStorage中的任何网站上起作用。如果您将令牌存储在内存中,则攻击者需要专门针对您的应用程序,因为还需要其他实现细节。

我不建议在内存中存储令牌,而应使用HttpOnly cookie,它可以保护令牌免受XSS攻击。现在,您只需要担心CSRF,只需将cookie的SameSite属性设置为Lax即可在现代浏览器中实现,或者您还可以使用CSRF令牌。

以上是关于如何在内存中存储JWT不受XSS攻击?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Java 防止 XSS 攻击或 Rest API JSON 中的不可信数据?

XSS攻击原理以及手段

Jwt 中 token应该存储到哪里?

这个 JWT 实现是不是可以防止 XSS 和 CSRF 攻击,同时仍然允许我访问有效负载?

如何利用XSS脚本攻击绕过WAF防火墙

反射/存储/DOM型XSS攻击原理及攻击流程详解