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

"Martin v. Löwis" martin at v.loewis.de
Sa Feb 3 13:08:50 CET 2007


Paul Rauch schrieb:
> uhm, das verstehe ich nicht wirklich..
> ich nehme von diesem programm, dass ich schreiben will nutzerangaben an.
> sagen wir mal diese sind in der variable nutzerangaben gespeichert.
> 
> 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

So, wie Du das geschrieben hast, wird einfach der Text 'Nutzerangeben'
(fest) in die Tabelle eingefügt. Ich dachte, Du wolltest den Text
eingeben, der in der Variable nutzerangaben steht?

Das schreibt man so

mysql.cursor.execute("UPDATE db.table SET x =%s WHERE y ='bla' LIMIT 1",
                      nutzerangaben)

Das verhindert bereits, dass ' reingeschmuggelt wird.

> und wie funktioniert dieser zusätzliche parameter, was macht der?
> versteh das nicht..

Die Parameter für execute funktionieren so ähnlich wie bei der
%-Ersetzung, aber nicht ganz genau so. Vielmehr wird cursor.execute
alle Parameter *automatisch* richtig escapen. Du musst nur an die
Stelle, wo Du den Wert haben willst, im SQL %s schreiben (ohne
Anführungszeichen - die macht .execute selber rein).

Ciao,
Martin