处理嵌入式SVG脚本标记中的字符引用

n3v*_*m03 9 html javascript xss svg

这是一个xss脚本:

<svg><script>&#x61;&#x6c;&#x65;&#x72;&#x74;&#x28;&#x31;&#x29;</script></svg>
Run Code Online (Sandbox Code Playgroud)

<script>标签之间的代码将由alert(1)浏览器转换并执行.

但是如果我不使用<svg>标签,代码将不会被翻译成脚本.谁能告诉我为什么会这样?<svg>标签如何工作?

Rob*_*son 4

根据 HTML 5 规范,HTML 解析器明确禁止在脚本标记中使用字符引用。

HTML5 有一个单独的脚本解析模式,作为随上下文而变化的多种标记化模式之一。脚本解析不允许字符引用,但其他一些解析模式允许。

SVG 基于 XML,其规则更加简单明了。基本上,字符引用在任何地方都是允许的,因为没有不同的上下文敏感解析模式

对于 html 中的 SVG,HTML 规范

出于本规范中内容模型的目的,SVG 命名空间中的 svg 元素属于嵌入内容、短语内容和流内容类别。

换句话说,将所有 SVG 文本解析为短语内容。所有 SVG 都是 HTML 5 解析器的单一自定义标记化模式。