was genau macht denn die funktion mysql_escape_string() ? setzt es escape zeichen am anfang und ende, falls in der variable ein ' oder ein " enthalten ist und es sonst zu einem fehlerhaften string kommen könnte ?
Sie kümmert sich um Zeichen, die die Syntax Deines SQL-Befehls zerlegen könnten. Das sind primär in der Tat die Anführungszeichen, die wie üblich einzeln mit einem Rückstrich maskiert werden.
Die Problematik ist dabei garnicht mal eine möglicherweise falsche SQL-Anweisung. Gibt jemand als Passwort
" or ""="
ein, hättest Du beispielsweise in der Abfrage
select * from nutzer where name="$name" and passwort="$passwort"
ein klitzekleines Problem:
select * from nutzer where name="Peter Lustig" and passwort="" or ""=""
Das Stückchen ""="" am Ende ist immer wahr - die Passwortprüfung ist somit also sehr elegant umgangen.
Außerdem solltest Du Variablen beim Ausgeben immer durch htmlentities() jagen
das ist ein super tip, danke.jetzt wo du es sagst frage ich mich wirklich wieso deswegen noch nie ein fehler passiert ist :)
manchmal denkt man halt auf die einfachsten sachen nicht.
Nicht nur manchmal.. ;) So ziemlich jedes selbstprogrammierte PHP-Board oder -Gästebuch, das hier vorgestellt wurde, hatte dieses Problem. Und selbst einige große Anbieter achten da nicht drauf.
ich hab das einmal mit 2 ganz simplen dateien probiert (und ohne session namen), die variablen werden gespeichert in der session, aber komischerweise danach nicht wieder ausgelesen...
Dann solltest Du ganz unten anfangen: Schalte im Browser die Cookiewarnung ein, um zu prüfen, ob überhaupt Cookies kommen.
Gruß,
soenk.e