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



