我目前正在使用ReactJS构建一个单页应用程序.
我了解到,不使用localStorage
的原因之一是XSS漏洞.
由于React会逃避所有用户输入,现在使用localStorage
安全吗?
我目前正在使用ReactJS构建一个单页应用程序.
我了解到,不使用localStorage
的原因之一是XSS漏洞.
由于React会逃避所有用户输入,现在使用localStorage
安全吗?
在大多数现代单页应用程序中,我们确实必须将令牌存储在客户端的某个位置(最常见的用例——在页面刷新后保持用户登录).
总共有两个选项可用:Web存储(会话存储、本地存储)和客户端cookie.Both options are widely used, but this doesn't mean they are very secure.
Tom Abbott很好地总结了JWT sessionStorage and localStorage security个:
Web存储(localStorage/sessionStorage)可以通过同一域上的JavaScript访问.这意味着在你的网站上运行的任何JavaScript都可以访问web存储,正因为如此.简而言之,XSS是一种漏洞,攻击者可以在其中注入将在您的页面上运行的JavaScript.基本XSS攻击试图通过表单输入注入JavaScript,攻击者在表单中输入
<script>alert('You are Hacked');</script>
,以查看该表单是否由浏览器运行,是否可以被其他用户查看.
为了防止XSS,常见的响应是对所有不受信任的数据进行转义和编码.React(主要是)为你做到这一点!这是一个很棒的discussion about how much XSS vulnerability protection is React responsible for.
但这并不能涵盖所有可能的漏洞!另一个潜在威胁是the usage of JavaScript hosted on CDNs or outside infrastructure.
汤姆又来了:
现代网络应用包括用于A/B测试、漏斗/市场分析和广告的第三方JavaScript库.我们使用包管理器(如Bower)将其他人的代码导入到我们的应用中.
如果您使用的脚本中只有一个被泄露了怎么办?恶意JavaScript可能会嵌入到页面中,Web存储也会受到损害.These types of XSS attacks can get everyone’s Web Storage that visits your site, without their knowledge.这可能就是为什么许多组织建议不要在web存储中存储任何有价值的信息或信任任何信息.这包括会话标识符和令牌.
因此,我的结论是,作为一种存储机制,Web存储does not enforce any secure standards during transfer.无论谁阅读并使用Web存储,都必须尽职尽责,确保始终通过HTTPS发送JWT,而不是HTTP.