Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Parametrisierte MySQL-Abfragen

Hüten Sie sich vor der Verwendung von String-Interpolation für SQL-Abfragen, da dies die Eingabeparameter nicht korrekt maskiert und Ihre Anwendung für SQL-Injection-Schwachstellen offen lässt. Der Unterschied mag trivial erscheinen, aber in Wirklichkeit ist er riesig .

Falsch (mit Sicherheitsproblemen)

c.execute("SELECT * FROM foo WHERE bar = %s AND baz = %s" % (param1, param2))

Richtig (mit Escapezeichen)

c.execute("SELECT * FROM foo WHERE bar = %s AND baz = %s", (param1, param2))

Es trägt zu der Verwirrung bei, dass die Modifikatoren, die zum Binden von Parametern in einer SQL-Anweisung verwendet werden, zwischen verschiedenen DB-API-Implementierungen variieren und dass die mysql-Clientbibliothek printf verwendet Style-Syntax anstelle des allgemein akzeptierten '?' Markierung (wird z. B. von python-sqlite verwendet ).