Cross-Site Scripting und SQL-Injection

Dynamische Webseiten und HTML

Bei HTML werden Inhalte und Markup durch spezielle Zeichenfolgen unterschieden. So leitet das Kleiner-Zeichen typischerweise einen HTML-Tag ein. Dabei können HTML-Tags entweder für die Formatierung einer Seite zuständig sein, oder aber sie leiten ein Script ein, das dann erst auf der Client-Seite im Browser ausgeführt wird (<SCRIPT>).

Erzeugt nun ein Webserver dynamische Seiten, muss er sicherstellen, dass die dynamisch generierten Inhalte (etwa das Resultat einer Datenbanksuche) keine der speziellen HTML-Zeichen enthalten. Tut der Server das nicht, kann es passieren, dass der Client Teile der Daten der Webseite als HTML-Tags oder Script interpretiert, statt diese Daten wie gewünscht in textueller Form darzustellen.

Bei vielen Webseiten ist es allerdings so, dass die Besucher selbst Inhalte beisteuern können. Sei es nun in Form eines Gästebuches, eines Forums oder einer Kommentarfunktion für Blog-Einträge. Damit erhält ein Angreifer die Möglichkeit zu bestimmen, welche Daten ein Webserver an andere Anwender ausliefert. Der Angreifer kann dann versuchen, dem Browser des Besuchers der Webseite ein Script unterzujubeln, das dieser anschließend ausführt. Dieses Script wird danach im Sicherheitskontext des Webservers ausgeführt. Dadurch hat das Script einen unerwünschten Sicherheitskontext und damit auch unerwünschte Privilegien innerhalb des Browsers des Angegriffenen.

Nun zu ein paar Beispielen, wie solche Angriffe in der Praxis aussehen können. Der einfachste Fall ist dabei der, der unter anderem in vielen webbasierten Diskussionsforen möglich ist. Dabei stellt ein Anwender des Forums Daten zur Verfügung, die von einem anderen Anwender gelesen werden können.