Was könnte dann passieren?
Dann wird die gesamte (Kunden)Datenbank bei Vodafone gelöscht.
Vorrausgesetzt das wird alles nicht auf Validität geprüft und der String stumpf in eine SQL-Abfrage gekippt.
Das nennt sich SQL-Injection.
Der Klassiker, wie im Comic, kurz erklärt:
Anwender gibt Benutzername und Passwort ein.
Daraus wird eine Datenbank abfrage generiert, in die die Benutzereingaben eingesetzt werden:
Code:
SELECT * FROM users WHERE username="Benutzername" AND password="Passwort";
Das ist eine einzelne Abfrage, die durch den Strichpunkt beendet wird.
Wenn da ein Ergebnis zurückkommt gibts den Benutzernamen und das Passwort ist korrekt.
Jetzt muss man noch wissen, das SQL alles was nach einem -- kommt als Kommentar versteht und folglich ignoriert.
Wenn als Benutzername jetzt z.B.
eingibt, würde die Abfrage so aussehen:
Code:
SELECT * FROM users WHERE username="Robert";--" AND passwort="Passwort";
Nach dem Strichpunkt ist dann Ende und alles nach dem -- wird ignoriert. Es ist trotzdem eine gültige SQL-Abfrage und mit dieser Manipulation muss man nur einen gültigen Benutzernamen kennen und könnte sich ohne Passwort einloggen, weil der Teil der Abfrage der das Passwort prüft ja auskommentiert wurde.
Wenn man jetzt den Benutzernamen so macht:
Code:
Robert"; drop database; commit;--
Wäre die daraus generierte SQL-Abfrage:
Code:
SELECT * FROM users WHERE username="Robert"; drop database; commit;--" AND passwort="Passwort";
Somit wären es drei Abfragen:
Code:
SELECT * FROM users WHERE username="Robert";
Die zweite Abfrage löscht die Datenbank, die dritte sorgt dafür, das es auch direkt ausgeführt wird und somit kein Rollback oder so mehr möglich ist.
Was gegebenfalls davor schützt ist, das der Datenbankbenutzer den das Webinterface benutzt keine Rechte für einen "drop database" hat.
Und genau deswegen lernt eigentlich jeder Fachinformatikerazubi im ersten Lehrjahr schon, das man Benutzereingaben nicht ungeprüft und ungefiltert in irgendwelche Datenbankabfragen einsetzt.
Trotzdem gibts Pfuscher, die das vergessen, nicht wissen oder ignorieren.
Hatte ich vor zig Jahren tatsächlich mal so gesehen, als ein Hobbyprogrammierer mal eine Homepage für seinen/meinen Verein gemacht hat.
Der war ziemlich baff, als ich ihm gezeigt habe, wie einfach man sich da ohne Passwort einloggen kann.