FlawOpen

flawopen.com/XSS in JavaScript/Svelte

Schützt Svelte standardmäßig vor XSS?

Referenzseite
Einfach erklärt

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.

RISKANT
<p>{@html comment}</p>
// der Wert wird als echtes HTML-Markup interpretiert
SICHER
<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

Siehe auch Cross-Site-Scripting (XSS, CWE-79): Funktionsweise und Schutz in jeder Sprache — flawopen.com Ist ein SVG-Upload ein XSS-Risiko? XSS-Risiko durch Vue v-html WKWebView: Nicht vertrauenswürdiges HTML? Reflected, Stored und DOM-basiertes XSS: Wo liegt der Unterschied? Sicherheitsrisiken von addJavascriptInterface unter Android Angular-XSS-Schutz: sichere Standards und Bypass-APIs