flawopen.com/XSS in JavaScript/Svelte
Schützt Svelte standardmäßig vor XSS?
Stell dir `{comment}` wie einen gedruckten Zettel vor: spitze Klammern bleiben sichtbarer Text. Bei `{@html comment}` soll der Setzer die Zeichen auf der Seite als Layoutanweisungen lesen. Stammt dieser Inhalt aus einer nicht vertrauenswürdigen Quelle, kann der Browser ihn als HTML interpretieren und XSS auslösen.
<p>{@html comment}</p>
// der Wert wird als echtes HTML-Markup interpretiert
<p>{comment}</p>
// automatisch escaped
Die Regel
Svelte kompiliert gewöhnliche Ausgabe mit {expression} als escaped Text. Der Wert wird daher nicht als HTML-Markup interpretiert. {@html} rendert dagegen absichtlich einen HTML-String. Die Svelte-Dokumentation warnt, dass der Wert escaped oder kontrolliert sein muss, um XSS zu verhindern. Behandle die Direktive als sicherheitskritische HTML-Einfügestelle und verwende einen gepflegten Sanitizer, wenn nutzergeschriebener Rich Text erforderlich ist.
Code überprüfen
Suche in `.svelte`-Dateien nach `{@html}`. Verfolge bei jedem Treffer die Herkunft des Werts und alle Verarbeitungsschritte. Behandle Nutzereingaben, externe Daten und gespeicherte Nutzerinhalte als nicht vertrauenswürdig. Soll der Inhalt Text bleiben, verwende `{expression}`. Wenn Rich-HTML nötig ist, bereinige es mit einem gepflegten HTML-Sanitizer und teste, dass nicht erlaubtes Markup entfernt wird.
grep -rn "{@html" --include="*.svelte" .Rich-HTML: die Sanitierungsgrenze einhalten
Verwenden Sie `{expression}`, wenn Inhalte als Text erscheinen sollen. Wenn Nutzer HTML erstellen müssen, bereinigen Sie den fertigen Inhalt mit einem gepflegten HTML-Sanitizer wie DOMPurify, bevor Sie ihn an `{@html}` übergeben. Fügen Sie danach nichts an das bereinigte Ergebnis an und verändern Sie es nicht, da dies den Schutz aufheben kann. Halten Sie den Sanitizer aktuell und erlauben Sie nur die Markup-Elemente und -Attribute, die das Produkt benötigt. HTML-Sanitizing macht denselben Wert nicht in JavaScript-, CSS- oder URL-Kontexten sicher.
Referenzen
- Svelte-Dokumentation — {@html ...}
- flawopen.com — XSS in JavaScript
- DOMPurify — project documentation
- OWASP — Cross Site Scripting Prevention