Entwickler-Ecke

Datenbanken - PREPARE Statement


Aya - Do 07.07.11 08:16
Titel: PREPARE Statement
Hi,

es gibt im MySQL ja dieses PREPARE:
http://dev.mysql.com/doc/refman/5.1/en/sql-syntax-prepared-statements.html

Weiß jemand ob das SQL Injection sicher ist?
Also wenn ich z.B. hier:

PREPARE stmt1 FROM 'SELECT * FROM customers WHERE name = ?';
SET @a = [userinput];
EXECUTE stmt1 USING @a;

Ist es hier noch moeglich SQL Injections zu machen indem man z.B. irgendwie 'SELECT irgendwas' oder 'DELETE..' als UserInput bekommt?

Aya


BenBE - Do 07.07.11 12:10

Sofern Du deine Parameter z.B. direkt über die API und nicht als SQL-Befehl setzt, sind Prepared Statements gegen SQL-Injections geschützt.

Hintergrund ist der, dass man durch die Parameter SQL schon im Vorfeld mitteilt, wo Parameter sind und somit eine Durchmischung von verschiedenen Programmkontexten (Code und Daten) vermeidet.

Bei deinem Beispiel wäre die SET-Zeile angreifbar. Dafür gibt es aber in PHP eine direkte Funktion (mysql_bind_param), mit der das vermieden werden kann.