psycopg2 und create database, create role, ...
Verfasst: Donnerstag 4. November 2010, 18:01
Hallo!
Ich habe wirklich lange bei Google und im Forum gesucht, um eine antwort zu finden, versprochen
Es geht um das SQL-Injection Problem bei der Benutzung von psycopg2 mit Variablen.
Soweit ich das verstanden hab, braucht man sich darum gar keine Gedanken zu machen, wenn man den zweiten Parameter von execute() benutzt.
Leider funktioniert so ein Aufruf
cur.execute(CREATE_DB, (db_name, )) mit einer Fehlermeldung wie
"CREATE DATABASE E'<db_name>' [...]" mit einem Fehler bei E' nicht.
Mit
cur.execute(CREATE_DB % db_name)
geht es natürlich. Aber das soll man ja laut manual "never never nerver" machen.
Wie denn sonst? Gibt es da eine übliche Vorgehensweise? In meiner Verzweiflung würde ich jetzt den zweiten, funktionierenden Aufruf stehen lassen und db_name vorher mit der re r'.*[;\'\\].*' auf Sicherheit prüfen...
Ich muss in meiner Datenbank unbedingt Datenbanken erzeugen, löschen und rollen erzeugen, löschen können. Eingaben kommen von Usern einer Webseite, daher kann ich den Strings nicht trauen.
Danke schonmal
Ich habe wirklich lange bei Google und im Forum gesucht, um eine antwort zu finden, versprochen

Es geht um das SQL-Injection Problem bei der Benutzung von psycopg2 mit Variablen.
Soweit ich das verstanden hab, braucht man sich darum gar keine Gedanken zu machen, wenn man den zweiten Parameter von execute() benutzt.
Leider funktioniert so ein Aufruf
cur.execute(CREATE_DB, (db_name, )) mit einer Fehlermeldung wie
"CREATE DATABASE E'<db_name>' [...]" mit einem Fehler bei E' nicht.
Mit
cur.execute(CREATE_DB % db_name)
geht es natürlich. Aber das soll man ja laut manual "never never nerver" machen.
Wie denn sonst? Gibt es da eine übliche Vorgehensweise? In meiner Verzweiflung würde ich jetzt den zweiten, funktionierenden Aufruf stehen lassen und db_name vorher mit der re r'.*[;\'\\].*' auf Sicherheit prüfen...
Ich muss in meiner Datenbank unbedingt Datenbanken erzeugen, löschen und rollen erzeugen, löschen können. Eingaben kommen von Usern einer Webseite, daher kann ich den Strings nicht trauen.
Danke schonmal
