Mahlzeit,
vorausgeschickt: ich habe das Gefühl, Du hast überhaupt nicht verstanden, was Sven erklärt hat.
Dann _sichert_ es also nicht MEHR - Hm.
Weder htmlentities() noch htmlspecialchars() sind zur "Sicherung" von irgendwas da. Die Funktionen sind dazu da, einen String wie z.B. "<b>blablubb</b>" genau so von einem Browser anzeigen zu lassen - indem evtl. vorhandene HTML-Sonderzeichen entsprechend maskiert werden. Sie sind insbesondere NICHT dazu da, Eingaben, die in irgendwelche Formulare gemacht wurden und die dann per GET oder POST an ein PHP-Skript weitergereicht wurden, vor der Verarbeitung oder dem Schreiben in eine Datenbank zu verunstalten.
Wenn ein Benutzer in ein Eingabefeld namens "var" unbedingt "<script>alert('CSS Vulnerable')</script>" eingeben will, lass ihn doch!
Das einzige, was Du tun musst (und IMMER tun solltest!) ist den Inhalt von $_POST['var']
(also den String "<script>alert('CSS Vulnerable')</script>") genau DANN zu behandeln, wenn Du diesen z.B.
-
in eine Datenbank einfügen willst:
mysql_real_escape_string($_POST['var'])
... Ergebnis: "<script>alert('CSS Vulnerable')</script>" -
als HTML ausgeben willst:
htmlspecialchars($_POST['var'])
... Ergebnis: "<script>alert('CSS Vulnerable')</script>"
Dann kann sowas
und dann wird eine Seite geladen, die als allererstes für jedes gehackte Eingabefeld einen Alert ausführt. Hm.
nämlich NIEMALS passieren.
Mal abgesehen von der Sicherung der Datenbank
Nochmals: zur "Sicherung der Datenbank" solltest Du ausschließlich die Funktion mysql_real_escape_string() verwenden - weder htmlspecialchars() noch htmlentities() haben in diesem Zusammenhang IRGENDWAS im Code verloren.
<script>alert('CSS Vulnerable')</script>
in das Eingabefeld eingebe passiert ja auch nichts...
Es sollte egal sein, was Du (oder irgendjemand sonst) in das Eingabefeld eingibt - mit vernünftiger, kontextbezogender String-Behandlung sollte NIEMALS etwas passieren.
$_POST['var'] macht ja offensichtlich komische Dinge mit dem Script bevor es überhaupt abgefragt (und dabei entschärft) wird...
Wie der Martin schon schrieb: normalerweise "macht" $_POST[] nix - außer Dir die per POST übergebenen Parameter zur Verfügung zu stellen. Zumindest, wenn in der php.ini oder httpd.conf keine merkartigen Einstellungen vorgenommen wurden ...
MfG,
EKKi
sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|