dedlfix: SQL Injections - escapen von Datenbank-/Tabellennamen

Beitrag lesen

echo $begrüßung;

Bleib mal bei realistischen Beispielen! :-) Solche Mehrfachstatements werden von MySQL im Normalfall abgelehnt [...] Trotzdem bleibt die Möglichkeit, das eine erlaubte Statement so zu verändern, dass es ein anderes Ergebnis liefert als das vom Programmierer vorgesehene. Das reicht möglicherweise schon aus, um an Informationen zu kommen, die nicht für aller Leute Augen bestimmt waren.

Welche Möglichkeiten gäbe es noch?

Wenn man eine Tabellennamen-Lücke ausnutzen will, könnte man vielleicht was mit Joins machen. Es kommt ja immer noch auf das konkrete SQL-Statement an, das man zu manipulieren gedenkt. Wenn in der SELECT-Klausel Spaltennamen statt * stehen, nützt das kartesische Produkt eines Joins auch nicht viel, um an die Informationen der anderen Tabelle zu kommen. Doch in deinem Fall steht das für den Backup-Zweck doch nicht ganz unsinnige * in der SELECT-Klausel ...
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, ...
Ob das jetzt ein realistisches Beispiel war? Wer weiß. Es soll schon vorgekommen sein, dass ein Pferd seinen Mageninhalt vor der Apotheke liegen sah. :-)

Ich habe oben jetzt noch eine WHERE Klausel angehängt, das wäre eigene Möglicheit, aber an mehr Informationen kommt man damit im Normalfall auch nicht, eher nur an weniger *g*

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.

echo "$verabschiedung $name";