String Parsing/Escaping
am 08.01.2005 02:57:07 von Divin MarquisHallo,
unten habe ich drei Versionen von einer SQL Abfrage aufgelistet, wo
jeweils der übergebene Parameter escaped wird.
> $value=mysql_escape_string($_POST['value']);
> mysql_query('SELECT * FROM table WHERE field="'.$value.'"');
+ Schnellster Code
- Schlechte Lesbarkeit, die Werte müssen manuell und separat escaped
werden
----
> $value=mysql_escape_string($_POST['value']);
> mysql_query(sprintf('SELECT * FROM table WHERE field="%s"', $value));
+ Gute Lesbarkeit
- Die Werte müssen manuell und separat escaped werden
----
sql_sprintf() wäre eine erweiterte Version von sprintf(), welche alle
übergebenen Parameter automatisch escaped.
> mysql_query(sql_sprintf('SELECT * FROM table WHERE field="%s"',
$_POST['value']));
+ Gute Lesbarkeit, die Werte müssen weder manuell noch separat
escaped werden
- Langsamster Code
Bis jetzt habe ich nur die Erste benutzt, jedoch versuche ich jetzt eine
bessere und abstraktere Lösung zu finden. Nach ein paar Tests habe ich
herausgefunden, daß die Performance - wie erwartet - von der Ersten bis
zur Letzten Version immer schlechter wird.
Während die dritte Version vermutlich die sicherste ist, da
sql_sprintf() die Parameter immer nach Escape Sequenzen absucht, ist sie
zugleich auch die langsamste. Speziell wenn der gleiche Wert mehrere
Male benutzt wird, da er dann (unnötigerweise) immer wieder escaped
wird, wo ihn die zweite Version nur einmal escaped. DAS jedoch ist zur
gleichen Zeit aber auch der große Vorteil des dritten Beispiels, da der
Entwickler die Werte nie manuell escapen muß.
Nun ist meine Frage, was wäre ein guter/der beste Kompromiss bzw. gibt
es irgendeine andere Lösung für diesen Fall?
Danke für Antworten,
Alexander
PS: All die Beispiele erwarten, daß magic_quotes_gpc abgeschalten ist.