Cross-Site Scripting

01 Jul 2008

Okay, damit auch der letzte Programmierer es rafft, mal hier ein kleiner Exkurs zum Thema Hacken von Webseiten.

Es gibt etwas, das man bei Webseiten echt vermeiden sollte: Eingaben von Nutzern ungefiltert wieder auf der Webseite auszugeben. Zum Beispiel den Text, der in einem Eingabefeld eingegeben wird, direkt auf der Seite darstellen mit:

<?php 
echo "Die Suche nach " . $suchbegriff ." hat leider keinen Treffer ergeben";
?>

Warum man das nicht darf? Ganz einfach. Wenn man nun in dem Eingabefeld folgendes eingibt:

<script>alert("XSS");</script>

wird auf der Webseite folgendes Stück HTML erzeugt:

Die Suche nach <script>alert("XSS");</script> hat leider keinen Treffer ergeben

Und das führt dazu, dass dieser Code ausgeführt wird. Der Nutzer sieht also diese Alert-Box.

Alert-Boxen sind natürlich noch harmlos, aber man kann hier so gut wie alles unterbringen. Zum Beispiel kann man so die Seite eines Web-Shops so umbauen, dass der Nutzer denkt, er wäre noch auf der Seite von dem Betreiber, aber in Wirklichkeit gibt er seine Kreditkarten-Daten gerade auf einer anderen Seite ein.

Das ganze ist also höchst gefährlich!

Der Fix dazu ist aber verflucht einfach:

<?php 
echo "Die Suche nach " . htmlspecialchars($suchbegriff,ENT_QUOTES) . " hat leider keinen Treffer ergeben";
?>

Dies führt dazu, das die > und < durch > und < ersetzt werden und der Code nicht mehr ausgeführt werden kann.

Ihr werdet erschreckt sein, welche gut besuchten Internetseiten diese Fehler aufweisen. Gebt einfach mal:

<script>alert("XSS");</script>

in ein paar Suchfeldern von Webseiten ein, Ihr werdet überrascht sein, wie viele dumme Idioten anscheinend für die Erstellung von Webseiten verantwortlich sind!

Bei Wikipedia gibt's einen auch einen Artikel mit weiteren verlinkten Texten zu dem Thema.