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
aufgebaut.Code:res = plpy.execute("SELECT blubb FROM bla WHERE myint = " + str(args[0]))
Oder natürlich auch mit einem String als Agrument möglich:
Ich habs natürlich mal selber versucht und als Agrument etwas in der ArtCode:res = plpy.execute("SELECT blubb FROM bla WHERE myvarchar = '" + args[0] + "'")
übergeben, das hat schon mal nicht geklappt.Code:'; DROP TABLE xyz;
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.![]()
Würde mich sehr freuen, wenn mir jemand einen Rat/ Tipp/ Hinweis hätte!
Danke & Gruß,
Tim
[QUOTE=Tim;6961]
Ich habs natürlich mal selber versucht und als Agrument etwas in der Art
übergeben, das hat schon mal nicht geklappt.Code:'; DROP TABLE xyz;
An dieser Stelle schlägt bereits das SELECT fehl und dann wohl auch das DROP. Aber nur, weil '' kein INTEGER ist.
Du könntest an solchen Stellen, wo Nutzereingaben kommen, mit PREPARED STATEMENTS arbeiten.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.
In meiner Del.Icio.Us - Linksammlung stehen ein paar Links zum Thema.
Andreas
--
https://www.xing.com/profile/Andreas_Kretschmer7ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
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
Links: Tobias Bauer - IT- und Funkdienstleistungen - Bilderrahmen-kaufen.de - Der Onlineshop für Bilderrahmen & Fotorahmen - Funkforum
Lesezeichen