[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