Hallo!
Ich verwende in meinem Skript auf dem FrontController ganz zu Beginn folgende Funktion, die mir alle Backslashes entfernt:
Wie ihr seht entfernt sie einfach alle Backslashes, wenn magic_quotes_gpc auf on ist. In meiner .ini siehts so aus, aber ich will ja .ini-unabhängig programmieren:
Alle SQL-Abfragen werden, bevor sie ausgeführt werden, dann natürlich mit mysqli::real_escape_string escaped. Nun habe ich folgendes Problem:
1. Fall
-------
Verwende ich die oben vorgestellte statische Methode nicht, gibts bei Eingabe von \ und " keinen Error, dafür aber bei ', so wird z.B.
"Daten und deren Darstellung können keine rechtlichen Ansprüche irgendwelch'er Art abgeleitet"
zu dieser SQL-Abfrage:
"Daten und deren Darstellung können keine rechtlichen Ansprüche irgendwelch\\'er Art abgeleitet"
und dies produziert einen Error (1064).. check the... etc.
2. Fall:
-------
Verwende ich oben genannte Methode, führt die Eingabe von " und ' nicht mehr zu einem Error, dafür aber jetzt die Eingabe von \:
'C:\Tomcat\webapps\etc\pub\'
bleibt aber so bei
'C:\Tomcat\webapps\etc\pub\'
Und trotzdem gibts wieder einen 1064-Fehler.
Ich kann mir echt nicht erklären, wieso im 2. Fall noch ein Fehler passiert. Ach ja, die Daten werden vor der Query so behandelt:
PS: Ich muss vielleicht noch anmerken, dass wenn ich ein Formular den String te\st eingebe, funktioniert das, wenn ich aber test\ eingebe, kommt es zu oben beschriebenem Fehler im 2. Fall.
Ich verwende in meinem Skript auf dem FrontController ganz zu Beginn folgende Funktion, die mir alle Backslashes entfernt:
PHP-Code:
public static function formatMagicQuotesRemove(){
if(get_magic_quotes_gpc()){
if(!empty($_GET)){
$_GET = self::stripArray($_GET);
}
if(!empty($_POST)){
$_POST = self::stripArray($_POST);
}
if(!empty($_COOKIE)){
$_COOKIE = self::stripArray($_COOKIE);
}
}
}
private static function stripArray($arr){
foreach($arr as $key=>$value){
if(is_array($arr[$key])){
$arr[$key] = self::stripArray($arr[$key]);
}
else{
$arr[$key] = stripslashes($arr[$key]);
}
}
return $arr;
}
Code:
; Magic quotes for incoming GET/POST/Cookie data. magic_quotes_gpc = On ; Magic quotes for runtime-generated data, e.g. data from SQL, from exec(), etc. magic_quotes_runtime = Off ; Use Sybase-style magic quotes (escape ' with '' instead of \'). magic_quotes_sybase = Off
1. Fall
-------
Verwende ich die oben vorgestellte statische Methode nicht, gibts bei Eingabe von \ und " keinen Error, dafür aber bei ', so wird z.B.
"Daten und deren Darstellung können keine rechtlichen Ansprüche irgendwelch'er Art abgeleitet"
zu dieser SQL-Abfrage:
"Daten und deren Darstellung können keine rechtlichen Ansprüche irgendwelch\\'er Art abgeleitet"
und dies produziert einen Error (1064).. check the... etc.
2. Fall:
-------
Verwende ich oben genannte Methode, führt die Eingabe von " und ' nicht mehr zu einem Error, dafür aber jetzt die Eingabe von \:
'C:\Tomcat\webapps\etc\pub\'
bleibt aber so bei
'C:\Tomcat\webapps\etc\pub\'
Und trotzdem gibts wieder einen 1064-Fehler.
Ich kann mir echt nicht erklären, wieso im 2. Fall noch ein Fehler passiert. Ach ja, die Daten werden vor der Query so behandelt:
PHP-Code:
$value = '\''.$this->con->real_escape_string($value).'\''
Kommentar