XSS跨站脚本与CSRF伪造漏洞深度解析

在客户端安全领域,XSS(跨站脚本攻击)与CSRF(跨站请求伪造)是最为经典的两种漏洞。本文将深入剖析它们的底层原理、同源策略机制以及实战中的利用与防御手段。

一、浏览器同源策略(SOP)

要理解客户端安全漏洞,首先必须了解同源策略(Same-Origin Policy)

  • 同源定义: 两个URL的协议域名端口三者必须完全相同。
  • 作用: 浏览器隔离潜在恶意文件的重要安全机制。如果网站A和网站B不同源,它们通常不能随意读取对方的DOM或加载私密资源。
  • XSS的本质危害: XSS最大的危害在于它**“打破了同源策略”**。通过注入恶意脚本到目标域,脚本便在同源上下文中执行,从而可以合法读取目标域的Cookie、Session等敏感信息。

二、XSS 跨站脚本攻击

XSS漏洞的成因在于网站对用户输入过滤不严,导致恶意JavaScript代码被注入到页面并由受害者浏览器解析执行。

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

  • 特征: 恶意代码存在于URL或请求参数中,通常需要诱导受害者点击特定链接(One-Click)触发,漏洞无法长期存储在服务器端。
  • 实战探测:
    • 寻找注入点(如搜索框、URL参数)。
    • 输入 <h1>test</h1> 测试HTML标签是否被过滤。
    • 注入Payload:<script>alert('xss')</script>。若受前端长度限制(如 maxlength),可通过浏览器审查元素修改限制后提交。

2. 存储型 XSS(持久化)

  • 特征: 恶意脚本通过提交(如留言板、评论区)永久性地存储在目标服务器的数据库中。每当有正常用户访问该页面时,脚本自动执行。
  • 危害: 影响范围广且隐蔽性强,无需受害者点击特定链接。
  • 利用场景: 窃取Cookie(身份凭证)。攻击者通过在线XSS平台(如Beef)生成Payload,注入后捕获访问者的Cookie、操作系统信息,甚至配置虚假的Flash升级弹窗进行网络钓鱼攻击,诱导下载木马。

3. DOM型 XSS

  • 特征: 漏洞位于前端JavaScript代码中,通过修改DOM节点触发,不经过服务器端处理,同样是非持久化的。

防御策略

  • 输入验证与输出编码: 实施严格的白名单过滤;对输出到页面的数据进行HTML实体编码(如将 < 转换为 &lt;)。
  • HttpOnly Cookie: 设置 Cookie 的 HttpOnly 属性,阻止 JavaScript 读取敏感 Cookie。
  • 内容安全策略(CSP): 限制脚本加载来源,防止恶意外部脚本被执行。

三、CSRF 客户端请求伪造

CSRF是一种诱骗受害者在已登录的Web应用程序上执行非本意操作的攻击。

1. 漏洞成因与核心逻辑

核心成因在于服务器仅通过 Cookie 或 Session 验证身份,而未在请求中加入能证明当前用户真实意愿的动态凭证
攻击者通过抓包分析受害者(如修改个人信息、转账)的数据包,篡改参数后构造恶意链接或隐藏表单,诱骗已登录的受害者点击,借用其身份发起恶意请求。

2. 攻击方式差异

  • GET 型攻击: 利用GET请求参数直接暴露在URL中的特性,拼接恶意参数并伪装成短链接或图片标签 <img src="恶意URL"> 诱导触发。
  • POST 型攻击: 攻击者需利用工具构造一个包含隐藏表单的恶意HTML页面,利用JS实现页面加载后自动提交表单,受害者访问该页面即触发攻击。

3. 防御机制:Token校验

修复 CSRF 漏洞的核心在于引入 Token 机制
服务器生成一个与用户身份绑定的随机字符串(Token),要求客户端在发起敏感请求时必须携带该 Token。由于同源策略限制,攻击者无法从其恶意站点读取受害者的有效 Token,从而导致伪造的请求被服务器拒绝。


XSS与CSRF常被组合利用。XSS用于突破同源策略窃取凭证或执行任意脚本,而CSRF则利用现有凭证“借刀杀人”。构建安全的Web架构必须对这两者进行全面的纵深防御。