String Parsing/Escaping

String Parsing/Escaping

am 08.01.2005 02:57:07 von Divin Marquis

Hallo,

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.

Re: String Parsing/Escaping

am 11.01.2005 09:44:23 von werbung

Alexander Mueller schrieb:
>=20
> Hallo,
Hai,
>=20
> unten habe ich drei Versionen von einer SQL Abfrage aufgelistet, wo=20
> jeweils der übergebene Parameter escaped wird.
>=20
> > $value=3Dmysql_escape_string($_POST['value']);
> > mysql_query('SELECT * FROM table WHERE field=3D"'.$value.'"');
>=20
> + Schnellster Code
> - Schlechte Lesbarkeit, die Werte müssen manuell und separat escape=
d=20
> werden
>=20
Mach doch daraus:
mysql_query("SELECT * FROM table WHERE field=3D'$value'");

Ist gut lesbar, allerdings langsamer als dein erster Code (etwas).
Manuell separat escapen must du trotzdem.

Ren=E9


--=20
Informatiker haben Humor, allerdings lässt sich der nur schwer
im Quelltext ausdrücken. Ausnahme Microsoft: Dort arbeiten die
Kabarettisten der Informatik, die sogar lustigen Quelltext schreiben
können. [Oliver Schad in dclpm=
]