phpbar.de logo

Mailinglisten-Archive

[php] sichere MySQL Queries

[php] sichere MySQL Queries

Martin Adler martin.adler at continum.net
Don Nov 9 14:13:35 CET 2006


Hallo,

Peter Prochaska wrote:
> Bei MySQL kann man bei mysql_query kein ; in einem Query angeben. Da
> wird ein Fehler geworfen.
> Da hat man das Problem mit ;DROP table 'x' nicht :-)

Meines Wissens nach ist es kein Problem, auch bei mysql_query ein 
Semikolon zum abschließen des Queries zu verwenden, was ich einst auch 
stets so gehandhabt habe.
Ein Fehler wird nur dann erzeugt, wenn nach dem Semikolon noch etwas folgt.
Für mysqli_query gilt das gleiche. Hier gibt es jedoch 
*mysqli_multi_query* was einen solchen Angriff erlauben würde.
(http://de.php.net/manual/en/function.mysqli-multi-query.php)

Da man ohnehin Semikolons nicht zum Abschließen von Queries verwenden 
sollte habe ich das vor längerer Zeit auch abgestellt.

Aber zurück zum eigentlichen Thema.
Mit mysql_real_escape_string solltest du gegen Injections gut gerüstet 
sein. Daher halte ich von Prepared-Statements nicht viel, da man hier 
bei einem Query der nur ein einziges mal Abgesetzt wird einen 
Performanceverlust hat (wenn auch nur geringfügig).

Bei Queries, welche mehrmals abgesetzt werden und sich lediglich die 
Inhalte von Variablen zur Abfrage ändern
z.b. ... 'SELECT * FROM `tbl` WHERE `col` = '.$var ...
sind Prepared Statements aus Performancegründen im jedenfall zu empfehlen.

grüße
Martin

php::bar PHP Wiki   -   Listenarchive