SQL Injection-Gefahr bei pl/python?

Fragen, Probleme etc. zu den prozedularen Sprachen ( PL/Tcl, PL/Perl und PL/Python).
Antworten
Tim
Neuer Benutzer
Beiträge: 11
Registriert: Mi 18. Apr 2007, 10:00

SQL Injection-Gefahr bei pl/python?

Beitrag von Tim » Mi 25. Apr 2007, 23:43

Hallo miteinander!

Ich wollte mal nachfragen, ob mir jemand so spontan sagen kann, wie groß die Gefahr einer SQL Injection ist, wenn ich mittels
plpy.execute Statements an die Datenbank abschicke.
Beispiel:
pl/python-Prozedur bekommt einen Integer als Argument übergeben.
Aus diesem Argument wird dann ein Statment

Code: Alles auswählen

res = plpy.execute("SELECT blubb FROM bla WHERE myint = " + str(args[0]))

aufgebaut.
Oder natürlich auch mit einem String als Agrument möglich:

Code: Alles auswählen

res = plpy.execute("SELECT blubb FROM bla WHERE myvarchar = '" + args[0] + "'")


Ich habs natürlich mal selber versucht und als Agrument etwas in der Art

Code: Alles auswählen

'; DROP TABLE xyz;

übergeben, das hat schon mal nicht geklappt.

Jetzt stellt sich mir natürlich die Frage ob ich einfach zu wenig über SQL Injections weiß (sehr wahrscheinlich!) oder ob das plpy.execute doch sehr "stabil" dagegen ist. Ich kenne es halt von php + mysql her, wo man da verdammt aufpassen muss und am besten nur mit sprinf aufbereitete Strings an die Datenbank gibt und mit addslashes alles schon escaped.

Im übrigens will ich keine schlimmen Dinge mit SQL Injections machen, sondern ich will verhindern dass das bei meinem Code jemand anderes macht. :p

Würde mich sehr freuen, wenn mir jemand einen Rat/ Tipp/ Hinweis hätte!

Danke & Gruß,
Tim

akretschmer
Erfahrener Benutzer
Beiträge: 7619
Registriert: So 29. Okt 2006, 13:35
Wohnort: Kaufbach, Sachsen, Germany, Germany
Kontaktdaten:

Beitrag von akretschmer » Do 26. Apr 2007, 07:43

Tim hat geschrieben:
Ich habs natürlich mal selber versucht und als Agrument etwas in der Art

Code: Alles auswählen

'; DROP TABLE xyz;

übergeben, das hat schon mal nicht geklappt.

An dieser Stelle schlägt bereits das SELECT fehl und dann wohl auch das DROP. Aber nur, weil '' kein INTEGER ist.

Jetzt stellt sich mir natürlich die Frage ob ich einfach zu wenig über SQL Injections weiß (sehr wahrscheinlich!) oder ob das plpy.execute doch sehr "stabil" dagegen ist. Ich kenne es halt von php + mysql her, wo man da verdammt aufpassen muss und am besten nur mit sprinf aufbereitete Strings an die Datenbank gibt und mit addslashes alles schon escaped.



Du könntest an solchen Stellen, wo Nutzereingaben kommen, mit PREPARED STATEMENTS arbeiten.
In meiner Del.Icio.Us - Linksammlung stehen ein paar Links zum Thema.

Andreas
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

Tim
Neuer Benutzer
Beiträge: 11
Registriert: Mi 18. Apr 2007, 10:00

Beitrag von Tim » Fr 27. Apr 2007, 01:23

Hallo und danke für die Antwort!

Das Injection-Beispiel war eigentlich für die Varchar-Variante gedacht, wo man irgendwie den angefangen String beenden muss (escaptes Quote-Zeichen) und danach dann ein weiters Statement unterbringen kann.

Aber prinzipiell ist es schon möglich, da eine SQL Injection zu machen?

Dann werde ich mich mal mit Prepared Statements beschäftigen.
Danke für den Hinweis! :)

Gruß, Tim

Antworten