小编典典

使用reactjs将jwt存储在localStorage中是否安全?

reactjs

我目前正在使用reactjs构建一个单页面应用程序。我读到许多不使用localStorage的原因是由于XSS漏洞。由于React避开了所有用户输入,现在使用localStorage是否安全?


阅读 444

收藏
2020-07-22

共1个答案

小编典典

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

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

Tom Abbott很好地总结了JWT
sessionStorage和localStorage的安全性

Web存储(localStorage /
sessionStorage)可通过同一域上的JavaScript访问。这意味着您站点上运行的所有JavaScript都可以访问Web存储,因此,它
很容易受到跨站点脚本(XSS)攻击的攻击
。简而言之,XSS是攻击者可以注入将在您的页面上运行的JavaScript的一种漏洞。基本的XSS攻击尝试通过表单输入注入JavaScript,攻击者将JavaScript
<script>alert('You are Hacked');</script>放入表单中以查看它是否由浏览器运行并且可以被其他用户查看。

为了防止XSS,常见的响应是对所有不受信任的数据进行转义和编码。React(主要是)为您做到了!这是关于React负责多少XSS漏洞保护的精彩讨论

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

再次是汤姆:

现代网络应用程序包括用于A /
B测试,渠道/市场分析和广告的第三方JavaScript库。我们使用Bower等软件包管理器将其他人的代码导入我们的应用程序。

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

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

2020-07-22