XSS 学习笔记

基于 PayloadsAllTheThings、OWASP、MDN,把 XSS 攻击面和防护检查整理成实践清单。

测试方法

  1. 先确认输出上下文:HTML text、attribute、URL、JavaScript string、CSS、DOM sink、iframe wrapper。
  2. 逐个粘贴对应 payload,记录是否执行以及由哪条策略阻止。
  3. 同时测试管理员控制台、通知、邮件、日志、预览等延迟渲染 surface。

容易遗漏的攻击面

HTML / attribute

仅移除 script 不够,还要检查 event handler、SVG onload、引号逃逸。

URL / protocol

href/src/action/data 需在解码规范化后做 protocol allowlist。

DOM sink

location、hash、postMessage 进入 innerHTML 等 API 会形成 DOM XSS。

Rich text / Markdown

不要只看存储格式,应 sanitize 最终 HTML。

iframe embed

需要 host/protocol allowlist、sandbox、allow 属性与 referrer policy。

Files / Blind XSS

SVG/HTML 上传和管理员审核页是延迟存储型 XSS 常见 surface。

防护清单

希望讨论的真实问题

社区编辑器与 iframe embed

ProseMirror 内容由独立 renderer 展示并使用 DOMPurify 后,仍需面对多 provider iframe embed 是否能长期靠 host allowlist 管理的问题。

昵称与图标渲染

profile 字段看似很小,但进入 attribute 或 custom renderer 后会把 stored XSS 扩散到评论、通知和管理员列表。