标签名里藏 JavaScript:localName 保小写绕过 WAF

标签名里藏 JavaScript:localName 保小写绕过 WAF

一句话:HTML 标签名虽被浏览器转大写存储,但 DOM 的 localName 保留小写版本——
Gareth Heyes 用这一点把 payload 整个塞进标签名,绕过针对属性/标签结构的 WAF 与黑名单,
全浏览器通用。

要点

原语抽象:同一标记的两个视图(序列化文本 vs DOM localName)之间的语义差异
本身就是 payload 载体——过滤器的输入视图和执行引擎的输入视图不一致。
亲戚手法:浏览器解析差异家族(mXSS、SVG/MathML 命名空间混淆)的新成员;
差异:不依赖命名空间切换,靠属性回读(attributes[0].value = localName),
全浏览器通用、更难在过滤器层封死。
防御启示:基于序列化文本的黑名单/正则挡不住 DOM 层回读,净化必须在解析后
的 DOM 上做并以 DOM 为准验证。

原文: https://portswigger.net/research/whats-in-a-tag-name-javascript-apparently
来源发布时间: 2026-08-25