MySQL: mysql_real_escape_string()

FrankWST

Erfahrenes Mitglied
Hallo,

ich habe eine Frage zu mysql_real_escape_string():
Oft wird pauschal gesagt "verwende das immer für alle SQL-Parameter".

Ein Beispiel:
PHP:
    $query = sprintf('
              SELECT name
              FROM   mitglied
              WHERE  id = "%d"',
                $mitglidId);

Hier erscheint mir das überflüssig, da der Parameter durch das %d auf eine ganze Zahl abgebildet wird.

Ebenso, wenn ich Strings verwende die aus "vertrauenswürdigen" Quellen stammen z.B. Zeitstempel aus der Datenbank.

Liege ich richtig, dass für diese Fälle keine SQL-Injection möglich ist?

Danke und Gruß,
Frank
 
item: wenn die id nur numerisch ist, sollte das SQL ohne die " geschrieben werden, da sonst die DB-Engine aus der Zahl ein String macht und diesen wieder mit einer Zahl vergleicht.

item: vertrauenswürdige Strings, die von aussen nicht manipuliert werden können, können auch ohne escape_string verwendet werden. Aber wehe in einem Späteren Zeitpunkt können diese Daten von Aussen verändert werden...

item: Ein String mit sprintf in eine %d setzen funktioniert. Es wird ggf einfach 0 eingetragen. Insofern ist es nicht unbedingt notwendig
PHP:
echo sprintf('foo%d', 'bar');
//Ausgabe: foo0

Meine Meinung: Da man heute selten weiss, was in Zukunft wirklich alles gebraucht wird, ist es einfacher den mysql_real_escape_string() einfach mal bei jedem Query zu verwenden. Somit besteht die Gefahr nicht, dass man mit späteren Erweiterungen des Scripts nicht aus versehen eine Möglichkeit für SQL-Injection bietet.
 
Danke yaslaw, das sind gute Hinweise.
Meine Bedenken bzgl. allumfassender Benutzung von mysql_real_escape_string() gehen in Richtung Performance. Das ist ja eine Funktion die auf Strings arbeitet und damit per se als langsam einzuschätzen ist.
Gruß, Frank
 

Neue Beiträge

Zurück