Dies ist ein xss-Skript:
%Vor% Der Code zwischen <script>
-Tags wird vom Browser in alert(1)
übersetzt und ausgeführt.
Aber wenn ich kein <svg>
-Tag verwende, wird der Code nicht ins Skript übersetzt.
Kann mir jemand sagen, warum das passiert? Wie funktioniert <svg>
tag?
Die Verwendung von Zeichenreferenzen innerhalb von Script-Tags wird von der. explizit untersagt HTML-Parser gemäß der HTML 5-Spezifikation.
HTML5 hat einen separaten Skript-Parsing-Modus als einen von mehreren Tokenisierungsmodi, die mit dem Kontext variieren. Skript-Parsing erlaubt keine Zeichenreferenzen, einige der anderen Parsing-Modi tun dies.
SVG basiert auf XML, wo die Regeln viel einfacher und einfacher sind. Grundsätzlich sind Zeichenreferenzen überall erlaubt, weil nicht verschiedene kontextsensitive Parsing-Modi sind .
Für SVG in HTML, sagt die HTML-Spezifikation
Das SVG-Element aus dem SVG-Namespace wird für die Inhaltsmodelle in dieser Spezifikation in die Kategorien eingebetteter Inhalt, Phrasierungsinhalt und Flussinhalt eingefügt.
Mit anderen Worten, den gesamten SVG-Text als Phrasierungsinhalt analysieren. All SVG ist ein einzelner benutzerdefinierter Tokenisierungsmodus für den HTML 5-Parser.
Da ich mit den Zitaten der anderen Antwort auf die Gründe für dieses Verhalten nicht wirklich zufrieden war, habe ich dieses "Problem" an die WHATWG Mailing-Liste , da es einige mögliche (wenn auch kleine) Sicherheitslücken gibt. Um Ian Hickson (Chefredakteur des HTML5-Standards bei W3C) zu zitieren: wörtlich :
Es ist nicht großartig, aber es ist beabsichtigt. Innerhalb von
<svg>
und<math>
Blöcke, wir verwenden den Parsing-Modus "fremder Inhalt", bei dem das Parsen viel ist mehr Ähnlichkeit mit dem Legacy-XML-Parsing als das Legacy-HTML-Parsing:Beachten Sie insbesondere das spezielle Verhalten für
<script>
hier beinhaltet nicht das Ändern des Tokeniser-Modus, wie in nicht-ausländischer Inhalt.
Roberts Antwort ist im Wesentlichen eine Sammlung korrekter Zitate, die sich auf eigenständigen HTML5- und SVG-Inhalt beziehen. Es gibt jedoch einen separaten Abschnitt bezüglich der Analyse von "fremden Inhalten", der dieses Verhalten erklärt. Und Ian stimmt zu, dass es keine wirklich perfekte Lösung ist, aber ehrlich gesagt kann ich mir auch keine vorstellen, die sowohl mit "Semi-SGML" als auch mit XML-Parsing kompatibel ist.
Tags und Links javascript html xss svg