Dennis: SQL Injections - escapen von Datenbank-/Tabellennamen

Beitrag lesen

Hi dedlfix,

Wenn man eine Tabellennamen-Lücke ausnutzen will, könnte man vielleicht was mit Joins machen.

An die Möglichkeit habe ich jetzt so spontan gar nicht mehr gedacht - da ließe sich vielleicht noch was machen.

Ich kann mir durchaus einen Anwendungsfall vorstellen: Jemand soll "seine" Tabelle backupen dürfen, andere aber nicht. Der Programmierer war zu faul oder unfähig ein gescheites Zugriffskonzept zu verwenden und nimmt eine DB-Userkennung für alles, ...

Ist vielleicht ansatzweise realistisch - wobei man schon verdammt blöd sein müsste, wenn man den Leuten die Möglichkeit gibt, den Benutzernamen frei zu wählen, der sollte in so einem Fall eigenltich aus einer Session oder aus einer Datenbank kommen.

Wenn man SQL-Injection allgemein betrachtet und eine WHERE-Klausel-Lücke ausnutzt, könnte man grade solch eine vom Programmierer vorgesehene Einschränkung aufheben. Das Anhängen von "OR 1" ergibt eine uneingeschränkte Ergebnismenge.

Dazu  müsste allerdings die Einfügeposition der Daten _hinter_ dem WHERE liegen - was bei Tabellen recht unwahrscheinlich ist ;-) Ok, da kommen jetzt wieder JOIN's ins Spiel.

Wie auch immer - ich habe jetzt die neue, überarbeitete Version der MySQLDBExport.class.php online gestellt, Version 2.0.1 (Download).

Darin habe ich neben dem escape_table_name() noch eine Funktion set_newline() und get_error() eingebaut. Weiterhin gibt es bei make_dump() jetzt die Möglichkeit Parameter für DROP IF EXISTS und auszulassende Felder an die export_table_* Funktionen durchzuschleusen.

Ich möchte mich noch mals herzlich bei dir für deine Mühe und dein Engagement bedanken und hoffe, dass die Klasse jetzt soweit „bugfrei“ ist - als nächstes würde dann wohl noch anstehen, die Klasse für PHP5 zu überarbeiten.

MfG, Dennis.