Cross Site Scripting, kurz XSS, beschreibt eine Sicherheitslücke in Web Anwendungen. Was ist Cross Site Scripting und wie schützt man als Entwickler seinen Code davor?
Was ist Cross Site Scripting?
Ähnlich wie bei SQL Injection wird versucht eigenen Code einzuschleusen, daher gehört es auch zur Art der HTML Injection Angriffen. Die Sicherheitslücke entsteht, wenn Benutzer Eingaben ungefiltert und unmaskiert entgegen genommen und anderen Benutzern zur Verfügung gestellt werden. Dann wird der Inhalt im Kontext der Webseite dargestellt und fremde Skripte im Browser ausgeführt.
Oft sind auch die Übergabe von Parametern an ein serverseitiges Skript anfällig, das eine dynamische Webseite erzeugt. Etwa dann, wenn die Parameter ungeprüft wieder als Seiteninhalt ausgegeben werden .
Das Ziel des Hackers ist das Ausspähen von Account (Session) Informationen, die zum Beispiel in Cookies abgelegt sind und diesen Account dann zu übernehmen. Weitere mögliche Ziele sind Phishing Angriffe, einstellen eigener Inhalte (Defacements) oder weiteren Schadcode wie Trojaner auszuführen.
Anfälliger Code für XSS:
echo $_POST['user_input'];
In diesem Beispiel wird die Benutzer Eingabe einfach wieder ausgegeben, wie es zum Beispiel ein Gästebuch Eintrag machen würde. Hier passiert so lange nichts, bis bösartiger Code eingetragen wird. Als harmloses Beispiel für die Anfälligkeit wird <script>alert('xss');</script> eingegeben, was eine einfache Messagebox mit 'xss' öffnet.
Schutz vor Cross Site Scripting
Wie bei SQL Injection muss die Benutzer Eingabe maskiert werden, hier jedoch die Ausgabe im Browser. Alle notwendigen Zeichen werden in ihre entsprechenden HTML Codes umgewandelt. In PHP kann dies die Funktion
htmlentities() übernehmen.
Beispiel für htmlentities():
echo htmlentities($_POST['user_input']);
Mit Hilfe der htmlentities() Funktion wird beispielsweise '<' zu '<'. Das vorherige <script> Beispiel wird zu <script>alert('xss');</script> umgewandelt. Anschliessend führt der Browser die "<script>" Passage nicht mehr intern als Skript aus, sondern gibt <script>alert('xss');</script> als Seiteninhalt aus.
Zur Artikel Übersicht
PHP Sicherheit
Kommentar Verfassen