常见漏洞验证121 条

反射型 XSS 验证

输入未经编码直接回显到响应中时可能形成反射型 XSS;用无害标记定位回显位置与上下文,按上下文类型给出修复建议。

反射型 XSS 是什么

反射型 XSS(Cross-Site Scripting,跨站脚本)指用户提交的输入未经编码就回显在响应中,浏览器把它当作 HTML 或脚本解析执行。它与存储型的区别是数据不进数据库,只随当次请求反射回来,通常需要诱导受害者点击构造好的链接才能触发。验证的关键是定位回显位置与上下文——同样的输入落在 HTML 文本、HTML 属性、JavaScript 字符串还是 URL 里,利用方式与修复手段完全不同。常用做法是提交一个唯一无害标记串,在响应中检索它出现的位置,再判断该位置是否做了编码处理。

基本信息

风险类型跨站脚本(反射型),CWE-79
定位方法提交无害唯一标记串,检索响应中的出现位置
上下文类型HTML 文本、HTML 属性、JavaScript、URL
证明方式必要时用无害弹窗在自测浏览器验证可执行性
修复方向按上下文做输出编码,配合内容安全策略(CSP)

典型使用场景

  • 搜索框回显:搜索关键词原样显示在结果页
  • 错误回显:错误提示把输入参数直接写回页面
  • 表单预填:查询失败后把提交内容回填到输入框
  • 跳转提示:提示语拼接了用户可控的 URL 或标题
  • 接口返回 HTML:部分接口的 message 字段被页面当 HTML 渲染

标记法

标记法
1. 提交唯一标记串(如 xss-verify-7f3a),记录请求
2. 检索响应中出现的位置与上下文类型
3. 检查该位置的编码处理(是否实体编码)
4. 若进入 HTML 属性或脚本上下文,重点记录
5. 必要时在自测浏览器用无害弹窗确认可执行
6. 记录上下文与编码现象,给出对应修复建议

上下文与处理方式

回显位置危险点修复手段
HTML 文本标签可被注入对 < > & " ' 做 HTML 实体编码
HTML 属性属性可被闭合属性值加引号并实体编码,避免写入事件属性
JavaScript 字符串可跳出字符串执行用 JSON 序列化加安全转义,禁止直接拼接
URL 参数javascript: 等协议校验协议白名单,输出做 URL 编码
CSS 或注释特殊解析规则按对应上下文转义,或避免用户输入进入该位置
证明输入未编码进入危险上下文即足以说明风险;验证性弹窗只允许在测试账号与自用浏览器中进行,不对真实用户发起。
不要以能否弹窗作为唯一判定标准。CSP 拦截提示也不代表漏洞不存在——CSP 属于纵深防御,配置不当或存在绕过点的情况都可能出现。

易错点

  • 只检查是否过滤尖括号,漏掉 HTML 属性与 JavaScript 上下文,这两类往往更危险
  • 把 CSP 拦截提示当作漏洞不存在,CSP 属于缓解措施而非根治
  • 用真实用户会话做验证,可能影响他人;应使用自建测试账号
  • 只测一个参数,忽略请求头、Referer、User-Agent 等也可能回显的位置

数据来源与参考

  • OWASP WSTG WSTG-INPV-01
  • OWASP Cheat Sheet:XSS Prevention
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌