• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

magic_quotes - runtime und gpc

Egleria

Neues Mitglied
Hi,

Ich bin gerade dabei einige Filterfunktionen für meine Website zu schreiben. Die Website soll natürlich unabhängig von der PHP-Konfiguration immer richtig filtern, weswegen sich meine Frage ergibt.

Ist magic_quotes_gpc aktiviert werden alle get, post und cookie-Strings bei jeden ",' etc. mit einen Backslash ergänzt. Selbiges gillt für Eingaben in die Datenbank, wenn magic_quotes_runtime aktiviert ist. Soweit mein Verständnis.

Aber was passiert, wenn beides aktiviert ist und ich einen string, der per gpc übermittelt wurde in die Datenbank schreibe? Werden dann alle ",' etc. insgesamt zweimal mit einen Backslash versehen?

Danke schonmal für die Antwort :)
 
da mittlerweile jeder moderne server magic_quotes deaktiviert hat, muss man sich darüber keine gedanken machen.
wenn du auf der sicheren seite fahren willst, verwende einfach mysql_real_escape_string(). das arbeitet ungeachtet der konfiguration und passt je nach einstellung (on oder off) das setzen der backslashes an.

Nils aka XraYSoLo
 
da mittlerweile jeder moderne server magic_quotes deaktiviert hat, muss man sich darüber keine gedanken machen.
wenn du auf der sicheren seite fahren willst, verwende einfach mysql_real_escape_string(). das arbeitet ungeachtet der konfiguration und passt je nach einstellung (on oder off) das setzen der backslashes an.

Nils aka XraYSoLo
Bei mir setzt die Funktion schön immer ein zweites Backslash vor das bereits vorhandene.

Ich rate an die magic_quotes zu aktivieren, dann hat man die hässliche mysql_real_escape_string()-Funktion nicht überall rumstehen, die sehr lang ist und Platzverschwendung ist, wenn man's anders machen kann.
 
bei programmiersprachen kommt es auf funktionalität an, nicht auf kompaktheit wie bei HTML ;-).
zusätzlich wird ja generell empfohlen, magic_quotes = off zu setzen.

Nils aka XraYSoLo
 
Mhh...

Also halte ich nun fest, dass ich magic_quotes nicht benutzen sollte, da es nicht empfohlen wird. Und ich aber real_escape_string() auch nicht gebrauchen kann, da ich sonst unter umständen überall doppelte Backslashes habe. ^^

Wobei ich nicht verstehe wo dann der unterschied zu AddSlashes() sein soll, wenn real_escape_string() nichtmal überprüft ob bereits backslashes vorhanden sind.

Was mach ich nun?^^
 
mysql_real_escape_string() sichert zusätzliche bereiche ab, die addshlashes() nicht abdecken würde. kannst du auf php.net nachlesen.

Nils aka XraYSoLo
 
PHP:
function match_forquery($string) {
  if($get_magic_quotes_gpc)
     $string = stripslashes($string);

  return real_escape_string($string);
}

So würde dann meine Funktion aussehen um einen String sicher für die Benutzung innerhalb einer Abfrage zu machen. Nun habe ich aber folgendes gelesen:

If magic_quotes_runtime is enabled, most functions that return data from any sort of external source including databases and text files will have quotes escaped with a backslash. If magic_quotes_sybase is also on, a single-quote is escaped with a single-quote instead of a backslash.

Heißt das nun, dass alle strings, die ich aus der Datenbank per SELECT entnehme, mit Backslashes versehen werden - wenn mqr an ist?
Und vor allen Dingen heißt das "nur"?, oder muss ich auch damit rechnen, dass Daten die ich per INPUT oder UPDATE einfüge ebenfalls mit Backslashes versehen in der Datenbank gespeichert werden?
In diesem Zusammenhang stellt sich dann auch die Frage ob ich bei SELECT, INPUT und UPDATE zusätlich auf die Auskommentierung mit einfachen Anführungszeichen durch magic_qoutes_sybase achten muss.

Viele viele Fragen und ich hoffe ihr könnt mir helfen :)
 
Zurück
Oben