Hallo,
Es reicht aus, bei der Ausgabe in HTML htmlspecialchars() aufzurufen.
Also htmlspecialchars() macht weniger als htmlentities() - Hm.
ja, es macht weniger Unsinn.
Gut, für dein konkretes Beispiel wirken beide Funktionen exakt gleich.
Dann hat meine Variable var nach der Anwendung von htmlspecialchars(var) also immernoch den Wert
<script>alert('CSS Vulnerable')</script>
Richtig.
und dann wird eine Seite geladen, die als allererstes für jedes gehackte Eingabefeld einen Alert ausführt. Hm.
Falsch. Es zeigt den Text "<script>alert('CSS Vulnerable')</script>" an der Stelle an, an der der Feldinhalt ausgegeben wird, führt aber kein Script aus. Da ist ja nirgends ein script-Tag, sondern nur ein maskiertes Kleiner-Zeichen, das Wörtchen "script" und ein ebenso korrekt maskiertes Größer-Zeichen.
Mal abgesehen von der Sicherung der Datenbank - immernoch meine Frage: Wieso geht das überhaupt?
Denn wenn ich
<script>alert('CSS Vulnerable')</script>
in das Eingabefeld eingebe passiert ja auch nichts...
Doch, dann müsste an derselben Stelle der String "<script>alert('CSS Vulnerable')</script>" angezeigt werden.
Es ist allerdings schwer, das alles zu überblicken, solange du uns nicht ein wenig an deinem Quellcode teilhaben lässt.
$_POST['var'] macht ja offensichtlich komische Dinge mit dem Script bevor es überhaupt abgefragt (und dabei entschärft) wird...
Nö. Es reicht die Parameter nur durch - es sei denn, dein Hoster hätte so dämliche PHP-Optionen wie magic_quotes aktiviert - dann werden Anführungszeichen innerhalb der Parameter mit einem Backslash maskiert.
So long,
Martin
F: Was sagt der große Keks zum kleinen Keks?
A: Du kannst dich jetzt verkrümeln.