使用ReactJS在localStorage中存储JWT安全吗?

我目前正在使用ReactJS构建一个单页应用程序

我了解到,不使用localStorage的原因之一是XSS漏洞

由于React会转义所有用户输入,现在使用localStorage安全吗

在大多数现代单页应用程序中,我们确实必须将令牌存储在客户端的某个位置(最常见的用例-在页面刷新后保持用户登录)

总共有两个选项可用:Web存储(会话存储、本地存储)和客户端cookie这两个选项都被广泛使用,但这并不意味着它们非常安全。

Tom Abbott很好地总结了JWT会话存储和本地存储安全:

Web存储(localStorage/sessionStorage)可通过同一域上的JavaScript访问。这意味着在您的站点上运行的任何JavaScript都可以访问web存储,因此容易受到跨站点脚本(XSS)攻击。简而言之,XSS是一种漏洞类型,攻击者可以在其中注入将在您的页面上运行的JavaScript。基本XSS攻击试图通过表单输入注入JavaScript,攻击者将<脚本>警惕(“你被黑客攻击了”)&lt/脚本&gt编码到表单中,以查看该表单是否由浏览器运行,是否可供其他用户查看

为了防止XSS,常见的响应是对所有不可信数据进行转义和编码。React(大部分)会为你做到这一点!这里有一个关于XSS漏洞保护的重要讨论

但这并不能涵盖所有可能的漏洞!另一个潜在威胁是使用托管在CDN或外部基础设施上的JavaScript

汤姆又来了:

现代web应用程序包括用于A/B测试、漏斗/市场分析和广告的第三方JavaScript库。我们使用包管理器(如Bower)将其他人的代码导入到我们的应用程序中

如果您使用的脚本中只有一个被破坏了怎么办?恶意JavaScript可以嵌入到页面中,Web存储也会受到损害这些类型的XSS攻击可以在不知情的情况下获取访问您网站的每个人的Web存储。这可能就是许多组织建议不要在Web存储中存储任何有价值的内容或信任任何信息的原因。这包括会话标识符和令牌

因此,我的结论是,作为一种存储机制,Web存储在传输过程中不会强制执行任何安全标准。无论谁阅读并使用Web存储,都必须尽职尽责,确保始终通过HTTPS发送JWT,而不是HTTP

发表评论