Seite 1 von 1

SQL Querys in Konfigurationsdatei

Verfasst: Montag 25. Januar 2010, 11:46
von marlob
Hallo,
habe ein Programm geschrieben, wo ich aus verschiedenen
Datenquellen (Excel, dbase, csv usw.) Daten in eine SQLite-Datenbank ablege
Diese Daten sollen später aus der Datenbank wieder ausgelesen werden um
daraus mit Hilfe von Cheetah verschiedene Dokumente zu generieren.
Jetzt möchte ich dem Nutzer die Möglichkeit geben, die SELECT-Statements
in eine Konfigurationsdatei zu schreiben (später soll eine GUI folgen,
ich möchte aber erst ein funktionierendes Programm haben).
Meine Frage ist nun, wie ich diese Abfragen am besten gestalte?
Soll ich einfach rohe SQL Querys (Gefahr von Injections) zulassen
oder gibt es Module die das besser können?
Wäre nett, wenn ich ein paar Hinweise bekommen würde.

Danke
marlob

Verfasst: Montag 25. Januar 2010, 11:54
von ms4py
Also damit ich noch keine Lücke gefunden, bin mir aber natürlich nicht sicher ;)

Code: Alles auswählen

if not sql.lower().strip().startswith('select'):
    return '<b>Error:</b> Only "Select" permitted.'

Verfasst: Montag 25. Januar 2010, 17:19
von Hyperion
Ist das ganze eine lokale Applikation oder eine Multi-User basierte? Bei ersterem wäre es ja ziemlich wurscht, da der Nutzer dort eh seine DB komplett einsehen oder schrotten kann, wenn er das denn will.

Verfasst: Montag 25. Januar 2010, 17:29
von Hyperion
ice2k3 hat geschrieben:Also damit ich noch keine Lücke gefunden, bin mir aber natürlich nicht sicher ;)

Code: Alles auswählen

if not sql.lower().strip().startswith('select'):
    return '<b>Error:</b> Only "Select" permitted.'

Code: Alles auswählen

select foo
from bar
where bla;
drop table bar
;-)

Wobei natürlich in der Doku steht:
Doku hat geschrieben: execute() will only execute a single SQL statement. If you try to execute more than one statement with it, it will raise a Warning.
Insofern sollte das wohl doch scheitern...

Dennoch hätte ich Bauchschmerzen dabei, wenn ich dem User komplett freie Hand lass bei der Gestaltung der Queries.

Von der Handhabung der Ergebnisse mal ganz zu schweigen...

Verfasst: Montag 25. Januar 2010, 17:48
von ms4py
Hyperion hat geschrieben:Wobei natürlich in der Doku steht:
Doku hat geschrieben: execute() will only execute a single SQL statement. If you try to execute more than one statement with it, it will raise a Warning.
Insofern sollte das wohl doch scheitern...
Jap, das funktioniert nicht. Das hab ich selbstverständlich getestet ;)
Hyperion hat geschrieben:Von der Handhabung der Ergebnisse mal ganz zu schweigen...
Geht problemlos in eine HTML-Tabelle ;-) Und mehr soll das auch nicht machen, ist nur zum Debuggen und auch nicht öffentlich erreichbar. Nur falls mal jemand zufällig darauf stößt, sollte er halt nicht gleich die ganze DB schrotten können...

Verfasst: Montag 25. Januar 2010, 18:27
von Dav1d
Man kann doch bei einer Datenbank nur bestimmten usern Rechte zum Lesen geben, oder?

Verfasst: Montag 25. Januar 2010, 18:38
von Hyperion
Dav1d hat geschrieben:Man kann doch bei einer Datenbank nur bestimmten usern Rechte zum Lesen geben, oder?
Nicht zwangsläufig. SQLite hat kein User-Management - ist auch nicht wirklich sinnvoll beim Einsatzgebiet von File basierten DRMS.

Zudem nützt das ja auch noch nicht so viel, wenn man keine Authentifizierung in der Applikation hat...

Verfasst: Montag 25. Januar 2010, 19:01
von marlob
Hyperion hat geschrieben:Ist das ganze eine lokale Applikation oder eine Multi-User basierte? Bei ersterem wäre es ja ziemlich wurscht, da der Nutzer dort eh seine DB komplett einsehen oder schrotten kann, wenn er das denn will.
Das ganze ist fürs erste eine lokale Applikation.
Später sollen dann mehrere User zugreifen sollen.
Bei typischen Projekten bei uns, aber höchstens 2 oder 3 User.
Ich denke, das wird mit SQLite noch zu handeln sein.