Naja, also ich würde Verunstaltung jetzt mal als das kleinere Übel sehen, genauso gut könnte man mit JavaScript Cookies stehlen (eig. Standard bei XSS), einen automatischen Redirect einbauen (Thema Drive-By-Infection), einen Keylogger aktivieren, ...
Es gibt ne ganze Menge, was man mit JavaScript machen kann, das sollte man auf keinen Fall unterschätzen.
@Yuri_Orlov: Strip Tags würd ich auch nicht verwenden, da stimm ich dir schon zu, aber man muss die Dinge schon ein wenig in einem Kontext sehen. Natürlich wird mir hier htmlentities nicht viel bringen, wenn ich nirgendwo HTML Code zum validieren habe. Wenn ich dem Angreifer direkt die Möglichkeit lasse, so JavascriptCode auszuführen, kann ich auch gleich alles in einen <script> Tag setzen
Was ich damit sagen kann: Natürlich kann es solche Szenarien geben, aber wenn man Abwehrmechanismen einsetzt, dann sollte man sich auch schon Bewusst sein, wie und wann sie wirken. Und in einem normalen und "realistischeren" Szenario ist htmlentities schon sehr ausreichend. (Wobei bei Eventhandlern auch wieder sehr vorsicht geboten ist)
Und wie würdest du eine Whitelist bei dynamisch generierten Seiten realisieren?
Und noch viel interessanter, wie würdest du eval und fromCharCode verbieten? Bedenke dabei allerdings sämtliche Codierungsmöglichkeiten und andere Tricks, mit denen man einfache Filter umgehen kann. Eine Blacklist würd ich eig. immer als letzte Möglichkeit ansehen, da es einfach zu viele Ansätze gibt, um selbst Multi-Stage Filter zu umgehen.
Übrigens, um dein Filtervorhaben gleich mal ad absurdum zu führen: Hast du deinen Seitenaufruf schon mal mit ?homepage=javascript:alert("XSS") probiert?
so long