XSS ist ein Angriff, bei dem fremder Code im Browser der Besucher im Namen der Seite läuft. Die Abkürzung steht für Cross-Site Scripting. Weil der Code von der richtigen Adresse kommt, darf er alles, was die Seite selbst darf.
- XSS
Ein Angriff, bei dem fremder Code im Browser der Besucher im Namen der Seite läuft.
Beispiel: „Das XSS steckte in einem Kommentarfeld, das HTML durchließ.“Auch: Möglich werden damit das Auslesen von Sitzungsdaten, das Umschreiben der Seite, das Mitlesen von Eingaben und Weiterleitungen auf nachgebaute Anmeldeseiten.
Abgrenzung zur SQL Injection: Beide entstehen aus ungeprüften Eingaben. Die eine wirkt in der Datenbank, die andere im Browser.
Welche Arten von XSS es gibt
Drei, nach dem Weg des Codes. Gespeichertes XSS liegt in der Datenbank, etwa in einem Kommentar, und trifft jeden Besucher der Seite. Reflektiertes XSS steckt in einem Link und trifft den, der ihn anklickt. DOM-basiertes XSS entsteht erst im Browser, wenn JavaScript ungeprüfte Werte in die Seite schreibt.
Was gegen XSS hilft
Maskieren an der Ausgabe, und zwar passend zur Stelle.
<!-- Angreifbar: der Name landet ungeprüft im HTML -->
<p>Hallo <?= $name ?></p>
<!-- Sicher: die Sonderzeichen werden maskiert -->
<p>Hallo <?= htmlspecialchars($name, ENT_QUOTES, 'UTF-8') ?></p>Jede Vorlagensprache bringt diese Maskierung mit, oft sogar eingeschaltet. Wichtig ist der Kontext: In einem Attribut, in einer Adresse und innerhalb von JavaScript gelten andere Regeln als im Fließtext. Dazu kommt die Content Security Policy, die fremde Skripte gar nicht erst ausführen lässt, und das Merkmal HttpOnly am Sitzungscookie, damit Skripte es nicht lesen können.
Wo XSS im Alltag entsteht
An den Rändern. Kommentarfelder und Bewertungen, Suchergebnisseiten, die den Suchbegriff anzeigen, Fehlermeldungen mit Benutzereingaben, Felder im CMS, die HTML erlauben, und eingebundene Skripte fremder Anbieter. Der letzte Fall ist der unangenehmste, weil der Code dort regelmäßig wechselt.