[Python-de] mysql gefährliche zeichen "escapen"

Diez B. Roggisch deets at web.de
Fr Feb 2 21:41:37 CET 2007


> 
> und dann will ich halt ein
> mysql.cursor.execute('UPDATE db.table SET x =\'Nutzerangeben\' WHERE y =
> \'bla\' LIMIT 1')
> und dabei verhindern, dass er weitere ' reinschmuggelt und dadurch ne
> mysqlinjection durchkriegt
> 
> und wie funktioniert dieser zusätzliche parameter, was macht der?
> versteh das nicht..


Statt einen SQL-String zusammenzubauen, der auch Benutzerdaten enthaelt, 
baust du einen von folgender Form:

sql = "update db.table set x = %s where y = %s limit 1"

Das ist der SQL-String.

Und den verwendest du dann wie folgt:

cursor.execute(sql, nutzerangaben, bla)

Damit sorgt der Treiber dafuer, das alles richtig escaped wird, bzw. 
besser noch das obiges statement auf db-seite gecached wird und 
parametrisiert.

Die %s in dem String sind Platzhalter - aber nicht _du_ fuellst die aus, 
sondern der Treiber. Das ist dadurch sicher.

Diez