Der Martin: Sicherheit: Warum geht das???

Beitrag lesen

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&gt

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
&lt;script&gt;alert('CSS Vulnerable')&lt;/script&gt;
in das Eingabefeld eingebe passiert ja auch nichts...

Doch, dann müsste an derselben Stelle der String "&lt;script&gt;alert('CSS Vulnerable')&lt;/script&gt;" 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.