首页/安全/漏洞与攻击面速查/XSS 三种类型:反射、存储与 DOM
Web 漏洞原理与防护55 条

XSS 三种类型:反射、存储与 DOM

反射型经单次请求回显触发,存储型将脚本持久化到服务端并影响其他用户,DOM 型完全发生在浏览器端 JS 中;三者的检测位置与修复位置不同。

漏洞与攻击面速查安全更新于 2026-10-13

XSS 的三种类型是什么

按触发路径划分,XSS 分为反射型、存储型与 DOM 型。反射型把单次请求里的数据回显到响应中,往往需要诱导点击链接;存储型把脚本内容持久化到服务端,任何访问该页面的用户都会中招,因此危害面最大;DOM 型完全发生在浏览器端,页面脚本从 URL 或本地存储读取数据并写入危险位置,服务端响应里看不到攻击内容。三者的差别决定了检测位置与修复位置:前两类看服务端输出编码,第三类要审计前端代码的数据流。

基本信息

共同根因不可信数据被当作代码在浏览器中执行
反射型特征响应里直接包含请求参数的内容
存储型特征恶意内容落库,其他用户访问时执行
DOM 型特征数据从未经过服务端,前端脚本写入页面
主要检测手段回显测试、代码审计、前端源码扫描
修复位置反射与存储看服务端输出编码,DOM 看前端数据流

典型场景

  • 搜索页与错误页把参数原样写回页面,属于反射型高发位置
  • 留言、昵称与工单标题落库后展示,属于存储型高发位置
  • 单页应用从 URL 片段读取参数并插入页面,是 DOM 型的常见路径
  • 富文本与 Markdown 渲染内容,需要白名单净化
  • 第三方统计与广告脚本注入的页面,需评估外部内容来源
  • 后台运营查看用户提交内容时执行脚本,影响管理员会话

类型对比

类型触发方式修复位置
反射型链接参数回显到页面服务端输出编码
存储型数据入库后被展示入库净化加输出编码
DOM 型前端 JS 从危险源写入危险汇前端代码审计:source 到 sink 链路

DOM 型常见危险汇(sink)

DOM 型常见危险汇(sink)
innerHTML / outerHTML
document.write
insertAdjacentHTML
eval / new Function
location 赋值用户可控 URL
# 数据源(source)常见于 location.search、location.hash、document.referrer 与本地存储
# 排查方法:从 source 出发跟到 sink,检查中间是否经过编码或白名单过滤
DOM 型不经过服务端,部分扫描器与 WAF 看不到,前端代码审计与依赖梳理更重要。
存储型的复测要注意数据来源:修复后应重新提交一份含标记字符的内容,确认在展示端被编码,同时清理历史遗留的恶意数据。

易错点

  • 只修反射型不做前端排查:DOM 型路径常被遗漏,复测时再次命中原入口
  • 存储型只做入库过滤:不同展示位置的编码规则不同,输出端仍需按上下文编码
  • 把前端框架当成绝对安全:默认转义只覆盖插值,显式绕过接口仍可执行脚本
  • 忽略后台展示页:管理员查看用户内容时执行的脚本影响面更大
  • 复测只看单次响应:DOM 型的证据要在浏览器里观察最终 DOM 结果,不能只看服务端返回
  • 修复后不清理历史数据:已落库的恶意内容会在修复后继续被展示

数据来源与参考

  • OWASP DOM based XSS Prevention Cheat Sheet
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌