Sven Rautenberg: SQL-Injection mit PostgreSQL

Beitrag lesen

Moin!

MySQL - quasi der Internet Explorer unter den Datenbanken - meint, dass geöffnete Kommentare (SQL-Injection) automatisch geschlossen werden müssen, was die SQL-Injection ja erst ermöglicht.

Diese Aussage ist sachlich falsch hinsichtlich der Tatsache, dass es an der Kommentarinterpretation liegen würde.

zB eine Passwortüberprüfung:
SELECT name FROM tabelle where password=xxxx;

Welche Teile dieses SQL-Strings werden wohl aus dynamischen Quellen stammen?

Durch eien SQL-Injection in mySQL wird daraus
SELECT name FROM tabelle /* where password=xxxx; */

Das wird nie passieren, wenn nicht der gesamte WHERE-Teil dynamisch per Variable in das oben genannte Beispielstatement eingefügt würde. Sowas tut man aber in der Regel nicht.

Realistisch ist:
SELECT name FROM tabelle WHERE password=$userwert

Dementsprechend kann auch erst hinter dem "password=" irgendeine SQL-Injection ansetzen.

Dein Szenario ist also unzutreffend formuliert, und die Tatsache, dass die eine oder andere Datenbank eventuell auf das Prüfen des ordnungsgemäß geschlossenen Kommentars verzichtet, ist absolut kein Hinderungsgrund.

PostgreSQL würde so etwas generieren (ohne abschließender Kommentarschließung)

SELECT name FROM tabelle /* where password=xxxx;

Wenn du erklärst, warum PostgreSQL sowas generieren würde... Wie kommt das Kommentarzeichen da vorne hinein?

PostgreSQL würde das Statement als fehlerhaft werten und nichts liefern.

PostgreSQL ist genauso mit Injections angreifbar, wie jede andere Datenbank auch. Wer es schafft, an der von dir postulierten Stelle das Öffnen eines Kommentars zu injecten, der schafft es ebenso, am Ende des Querys den Kommentar wieder zu schließen.

- Sven Rautenberg