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



我正在使用GraphQL学习JWT教程。

在该教程中,

把它保存在cookie中怎么样

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

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

但我在这篇SO文章中看到,javascript可以读取其他变量。

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

我是不是错过了什么?(我可能是因为我搜索过这个,但在互联网上一无所获。(

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

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

我不建议在内存中存储令牌,而是使用HttpOnly cookie来保护令牌不受XSS的影响。现在你只需要担心CSRF,它可以在现代浏览器中通过简单地将cookie的SameSite属性设置为Lax来实现,或者你可以额外使用CSRF令牌。

最新更新