Wir hatten ja schon festgestellt, dass die
einfachste Lösung
zum Verhindern von XSS, das Verbieten von HTML und damit JavaScript als
Benutzereingabe, heutzutage sehr oft nicht mehr möglich ist.
Dass die Benutzer aber manuell HTML-Code eingeben kann man meist auch nicht
erwarten, welcher normale Benutzer "spricht" schon HTML? Oder eine andere
Auszeichnungssprache wie BBCode? Womit diese Lösung ebenfalls
ausscheidet.
Unser Tool, unsere Daten, also alles ganz harmlos?
Am einfachsten verhindern Sie Cross-Site Scripting, indem Sie gar kein HTML
und damit JavaScript als Benutzereingabe akzeptieren. Wenn die Eingabe nur
aus reinem Klartext bestehen darf, kann sie beim Finden des ersten
HTML-Tags verworfen werden. Denn dann versucht jemand einen Angriff, und
der wird sofort abgewehrt, fertig, aus. Sie sollten nicht mal den Versuch
machen, den enthaltenen Code aus der Eingabe zu löschen. Denn die
Eingabe dient einzig und allein dazu, Schadcode in die Seiten Ihrer
Webanwendung einzuschleusen. Es gibt darin nichts, was aus irgend einem
Grund gerettet werden müsste.
Diese ebenso einfache wie effektive Lösung ist heutzutage nicht mehr
immer möglich. In Zeiten des Web 2.0 mit seinem "User generated
content" ist HTML-Code, zum Beispiel Auszeichnungs- oder
Formatierungsanweisungen, oft ein erwünschter Teil der Eingabe. Und
damit wird es deutlich schwieriger, erwünschte und unerwünschte
Inhalte auseinander zu halten.
Nachdem Sie alle möglicherweise für XSS anfälligen
Parameter der Webanwendung
ermittelt
und eine möglicherweise vorhandene Schutzfunktion
erkannt
haben, kann die Suche nach XSS-Schwachstellen los gehen.
Je nachdem, wo ein Parameter ausgegeben wird, müssen Sie andere Tests
verwenden. Oder genauer: Sie müssen Ihren Test so an die Umgebung
anpassen, dass er auch ausgeführt werden kann. Und nicht schon deshalb
fehl schlägt, weil der Browser ihn gar nicht als ausführbar
akzeptiert.
Nachdem Sie alle möglicherweise für XSS anfälligen Parameter der
Webanwendung
ermittelt haben,
kann die Suche nach XSS-Schwachstellen eigentlich los gehen. Es sind nur
noch ein paar Vorbemerkungen nötig.