Hallo, ich lese mich gerade in das Thema magic quotes und co. ein und mir ist der Sinn hinter diesem ganzen Thema leider noch nicht so ganz klar.
Wenn ich in meinem HTML-Dokument ein Anführungszeichen darstellen will, dann schreibe ich statt " ein " damit der php-interpreter weiß was los ist.
Ich habe also das " escaped. So weit so gut erstmal zum wort escapen.
Dann das Wort „magic quotes“. Erstmal: Wann wird/wurde magic quotes automatisch angewendet? Magic quotes bedeutet
doch, dass auf den String die Methode addslashes() angewendet wird. Ist das dasselbe wie escape() in Javascript? Ich dachte
aber da wäre escapen einfach, dass auf den ganzen Sonderzeichen % + eine Zahl gemacht wird. Was ist denn jetzt hier der
Unterschied bzw. wieso redet man hier plötzlich nur noch bon backslashes?
Wo muss ich auf das escapen achten und wie genau unterscheiden sich folgende Methoden:
mysqli_real_escape_string(), addbackslashes(), magic_quotes_gpc()
Sorry für diese Fragen aber ich bin irgendwie total verwirrt, was das Thema escapen angeht
Moin,
Also erst mal die Unterschiede der genannten Methoden:
addslashes (addbackslashes gibt es meines Erachtens nicht):
Schreibt vor folgenden Zeichen ein \ : ’ " \
Das hat den Grund, dass diese Zeichen eine MysqlQuery kaputt machen können. Dies wird von manchen Leuten sogar extra probiert. Eine sogenannte SQL Injection
Magic Quotes:
Soweit ich weiss, macht es das gleiche wie addslashes, mit dem Unterschied, dass es beim versenden der Formular-Daten automatisch geschieht. Deine Formular-Daten, die dann per POST oder GET ankommen wurden schon escaped. Das passiert alles automatisch, ohne einen Funktionsaufruf. Das Ganze ist nämlich eine Einstellung in der PHP Konfiguration.
Es wird jedoch von der Funktion abgeraten. (Standardmäßig sollte sie auch ausgeschaltet sein)
mysql_real_escape_string:
Ist wie die oben genannten Funktionen, escaped jedoch noch ein paar mehr Character: \x00, \n, \r, [I][/I], ', " and \x1a
Magic Quotes sind ganz großer Mist und werden mit PHP 5.4 hoffentlich endlich rausfliegen.
Die Funktion addslashes hat übrigens in Datenbankabfragen nichts zu suchen. Dort nur die Escape-Mechanismen der DB-Adapter verwenden (z. B. mysql(i)_real_escape_string).
Noch eine andere Frage, zu einem anderen Thema. Warum verwende ich, wenn ich eine Session komplett löschen will session_destroy(); und warum unset($_SESSION[„key“]); für einzelne werte. Warum nicht gleich unset für beides?