Mögliches Hacking bei SQL -- schon gewußt?

Was sind SQL Injection Schwachstellen?


Beispiel: Der SQL-Befehl

SELECT * FROM adressen WHERE name = 'Schmidt';

sucht in der Tabelle adressen der Datenbank nach Einträgen, bei denen name gleich ‘Schmidt’ ist.

Nehmen wir einmal an, wir entwickeln eine Web-Anwendung, die eine Datenbank nach Adressen durchsucht. D.h. der Benutzer gibt irgendwo in einem Textfeld den Namen an, für den er die Adresse sucht. Der Name, den der Benutzer eingegeben hat, kommt bei unserer Anwenung in einer Variablen an, nennen wir sie mal $NAME. Jetzt könnten wir und ganz einfach eine passenden SQL-Anfrage basteln:

$ANFRAGE = "SELECT * FROM adressen WHERE name='{$NAME}';"

Statt {$NAME} wird dort der Inhalt der Variablen, also der Name, den der Benutzer angegeben hat, eingefügt. Wenn wir jetzt die Anfrage, die in der Variablen $ANFRAGE steht, an die Datenbank schicken - es ist schließlich eine gültige SQL-Abfrage -, bekommen wir alle gesuchten Adressen und können sie an den Browser des Benutzers schicken.

Was passiert, wenn der Benutzer aber keinen Namen eingibt? Sondern zum Beispiel so etwas:

xxx'; DROP TABLE adressen

$NAME mit diesem Inhalt wird einfach ersetzt, und die Anfrage, die an die Datenbank geschickt wird, sieht plötzlich so aus:

SELECT * FROM adressen WHERE name='xxx'; DROP TABLE adressen;

Diese Anfrage gibt alle Adressen von Herrn oder Frau xxx zurück … und löscht danach die Adressdatenbank (das macht die DROP TABLE Anweisung). Unsere Anwendung hat eine SQL Injection Schwachstelle, denn dadurch, dass ein Angreifer SQL-Code angeeigneter Stelle injiziert hat, konnte er Schaden anrichten.