Wer einmal Webseiten gebaut hat oder Datenbanken in seine Homepage integrierte, der wird sicher auch über das Thema XSS (Cross Site Scripting) gestolpert sein.
Aber was ist eigentlich XSS?

Definition
Es ist das Ausnutzen einer Sicherheitslücke über diese man Daten andere Nutzer ausspähen oder manipulieren kann.
Das Scripting kommt daher, dass zur Ausnutzung der Lücken meist Scripts genutzt werden, bspw. in Javascript.

Einführung
Erst einmal. Wessen Schuld ist es, wenn XSS nutzbar ist?
Hier liegt die Schuld ganz beim Admin oder Developer der Seite, denn mit relativ einfachen Mitteln kann man es den Hackern und Scriptern (das schließt Scriptkiddies mit ein) ziemlich schwer machen.
Denn eine Eingabe eines Users, sei es über eine Kommentarfunktion oder über die GET/POST-Parameter in PHP müssen gefiltert, d.h. nach unerlaubten Zeichen, Scripts etc. durchsucht werden.
Achtung: Auch wenn man eines der großen CMS nutzt, ist man davor nicht sicher. Deshalb immer auf neue Versionen updaten! Dort werden dann bekannte Sicherheitslücken geschlossen

Arten:
reflective/non-persistend XSS:
Hier wird ein GET-Parameter auf einer Seite manipuliert um Schadcode auszuführen.
Dies funktionert bspw. so:
Wir haben eine Seite mit einer Suchfunktion, welche den eingegebenen Suchbegriff als GET-Parameter weiterverarbeitet.
http://www.xyztestsiteabc123.com?search=Hier ist mein Suchbegriff
Falls die Seite den Suchbegriff irgendwann also wieder ausgibt, würde das auf der Seite so aussehen:

Sie suchten nach: Hier ist mein Suchbegriff

Nun kann man, falls die Eingaben der Suchfunktion nicht gefiltert werden, jeglichen Code eingegeben:

 http://www.xyztestsiteabc123.com?search=<img alt="" src="http://abouchleih.de/spaceinv_code1.png" width="42" height="42" /> 

Das ist noch nicht so schlimm, denn es wird hier „nur“ ein Bild auf eine Seite eingefügt, dennoch sollten solche Eingaben verboten werden, da sie erstens störend wirken und zweitens auch JavaScript so ausgeführt werden kann.

Das Ergebnis würde also beim obigen eingeben so aussehen:

Sie suchten nach:

Allerdings ist diese Methode recht harmlos, da man die User erst auf die manipulierte Seite locken müsste und die Seite auch nicht gespeichert ist.

persistend XSS:
Hier wird im Gegensatz zu oben, der Code in der Website gespeichert und bleibt so sichtbar.
Nutzbar ist dies bei ungefilterten Kommentarfunktionen in einem Gästebuch.
Wird nun ein Kommentar mit Code gepostet, so wird dieser bei jedem Aufruf der Website ausgeführt.

Beispielcode:

Hallo!<script type="“text/javascript“">
alert("Dies ist ein Script, welches zur anschaulichen Darstellung von XSS auf einer Website verwendet wurde. Lies den Artikel für mehr Info 😉 ");
</script>

Das Ergebnis könnt ihr beim Klick auf den Button begutachten.

dombasiertes XSS:
Ähnlich dem reflective XSS, nur dass hier die Webanwendung/-site nicht beteiligt ist.
Der Code wird also nur auf dem Clientrechner verarbeitet.

Zu Part 2 hier geht’s hier entlang.