Cross Site Scripting (XSS)

vorige Präsentation: Authentifizierung und Session-Management | zurück zum Buch-Kapitel [esc] | Nächste Präsentation Unsichere direkte Objektreferenzen

Die OWASP beschreibt dieses Problem allgemein so:

XSS-Schwachstellen treten dann auf, wenn die Anwendung von BenutzerIn X eingegebene Daten übernimmt und an den Browser anderer BenutzerInnen zurücksendet, ohne sie hinreichend zu validieren und zu escapen.

Wenn meine Seite eine XSS-Schwachstelle enthält könnte folgendes geschehen:

Cookies (und damit auch Sessions) von BenutzerInnen meiner Seite können gestohlen werden, die Darstellung der Webseite kann verfälscht werden, eine automatische Weiterleitung auf andere Seiten, z.B. Malware-Seiten kann eingebaut werden.

Der schlimmste Fall wäre die Installation eines sogenannten XSS Proxies, der es der AngreiferIn ermöglicht die Browser von BesucherInnen ferzusteuern.

Cross Site?

Diese Attacke wird “über die Bande gespielt”, es ist ein Drama mit drei Rollen:

Es ist also nicht die Site der Hackerin, die hier gefählich ist, sondern eine andere, scheinbar harmlose Seite.

Vermeidung von XSS

Cross Site Scripting kann komplett vermieden werden, wenn man niemals Input von BenutzerInnen auf der Webseite wiedergibt. Das ist ein seltener, aber sehr sicherer Fall.

XSS vermeinden kann man mit zwei Verteidigungs-Linien:

Eingabe validieren in PHP

Achtung: der PHP Befehl strip_tags enfernt keine Attribute aus erlaubten Tags, es ist also ganz leicht möglich Javascript in einem onmouseover Attribut einzuschummeln.

Statt dessen sollte man einen HTML-Filter wie HTML Purifier verwenden.

Richtig Escapen

Je nachdem in welchem Kontext man Daten ausgibt muss man verschiedenes Escaping verwenden. Drei Beispiele, und die dafür passenden PHP-Befehle:

  1. in einer URL - urlencode
  2. in HTML - htmlspecialchars
  3. in Javascript, als Wert einer Variable - json_encode

Es gibt aber noch viele andere Kontexte!

Mehr

Siehe XSS (Cross Site Scripting) Prevention Cheat Sheet

Cross Site Scripting (XSS)

vorige Präsentation: Authentifizierung und Session-Management | zurück zum Buch-Kapitel [esc] | Nächste Präsentation Unsichere direkte Objektreferenzen

/

#