Cross Site Scripting (XSS)
als Präsentation ▻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:
- Hilda Harmlos stellt eine Webseite mit XSS-Schwachstelle aufs Netz, zum Beispiel mit einem Forum.
- Alyssa P. Hacker erstellt einen Forum-Eintrag der die XSS-Schwachstelle ausnutzt.
- Peter Publikum will das Forum lesen, und wird dabei attackiert.
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:
- Schon bei der Eingabe (mit einer white-list) alles Entfernen was nicht harmlos ist.
- Bei der Ausgabe immer ein geeignetes Escaping verwenden
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:
- in einer URL -
urlencode
- in HTML -
htmlspecialchars
- in Javascript, als Wert einer Variable -
json_encode
Es gibt aber noch viele andere Kontexte!
▻Mehr
Kapitel
- Das Web Und Html
- Css
- Css Layout
- Urls
- Formulare
- Javascript Dom
- Jquery
- Kommandozeile
- Git
- Http
- Php Vorbereitung
- Php
- Php Db Lesen
- Session
- Php Db Schreiben
- Php Db Optimierung
- Grafik
- Javascript
- Applied Jquery And Css
- Json
- Xml
- Security
- Injection
- Authentifizierung und Session-Management
- Cross Site Scripting (XSS)
- Unsichere direkte Objektreferenzen
- Sicherheitsrelevante Fehlkonfiguration
- Verlust der Vertraulichkeit sensibler Daten
- Fehlerhafte Autorisierung auf Anwendungsebene
- Cross-Site Request Forgery (CSRF)
- Nutzung von Komponenten mit bekannten Schwachstellen
- Ungeprüfte Um- und Weiterleitungen
- Wordpress
- Apache
- Advanced Javascript
- Qualitaet