SQL Injection
SQL-Injection nutzt Webanwendungen aus, die die Benutzereingaben nicht validieren. Hacker können bösartige SQL-Befehle über die Webanwendung an eine Backend-Datenbank zur Ausführung übergeben.
SQL-Injection kann unberechtigten Zugriff auf eine Datenbank erhalten oder Informationen direkt aus der Datenbank abrufen. Viele Datenschutzverletzungen sind auf SQL-Injection zurückzuführen.
Wie es funktioniert
Nach der Eingabe von Benutzername und Passwort funktionieren die SQL-Abfragen hinter der Benutzeroberfläche wie folgt:
"SELECT Count(*) FROM Users WHERE Username=' " + txt.User.Text+" ' AND Password=' "+ txt.Password.Text+" ' ";
Nun nehmen wir an, der Benutzer gibt den Benutzernamen: admin und das Passwort: passwd123 ein, so wird nach dem Klicken auf die Anmelde-Schaltfläche die SQL-Abfrage wie folgt ausgeführt:
"SELECT Count(*) FROM Users WHERE Username=' admin ' AND Password=' passwd123 ' ";
Wenn die Anmeldeinformationen korrekt sind, darf sich der Benutzer anmelden, sodass es sich um einen sehr einfachen (und daher unsicheren) Mechanismus handelt. Hacker nutzen diese Unsicherheit aus, um unbefugten Zugriff zu erhalten.
Hacker verwenden einen einfachen String, genannt Magical String, zum Beispiel:
Benutzername: admin
Passwort: anything 'or'1'='1
Nach dem Klicken auf die Anmelde-Schaltfläche funktioniert die SQL-Abfrage wie folgt:
"SELECT Count(*) FROM Users WHERE Username=' admin ' AND Password=' anything 'or'1'='1 ' ";
Sehen Sie sich den Passwortabschnitt der obigen Abfrage genauer an.
Password=' anything 'or'1'='1 '
Das Passwort ist nicht 'anything', daher führt password=anything zu FALSE, aber '1'='1' ist eine wahre Aussage und liefert daher einen wahren Wert zurück. Schließlich ist der Wert (FALSE ODER TRUE) aufgrund des OR-Operators TRUE, sodass die Authentifizierung erfolgreich umgangen wird. Nur aufgrund eines einfachen Strings (Magical String) ist die gesamte Datenbank kompromittiert.
So verhindern Sie
Bevor die Abfragen für die Benutzeranmeldeinformationen ausgeführt werden, nehmen Sie einige Änderungen vor, wie z. B. die folgenden:
$id = $_GET['id']
(1) $id = Stripslashes($id)
(2) $id = mysql_real_escape_String($id)
Aufgrund von (1) wird jedes einzelne Anführungszeichen (') im Eingabestring durch doppelte Anführungszeichen (") ersetzt, und aufgrund von (2) wird vor jedem (') ein (/) hinzugefügt. Der überarbeitete Magical String scheitert daran, die Authentifizierung zu umgehen, und Ihre Datenbank bleibt sicher.
Siehe auch
- SQL-Injection auf Wikipedia
- Erklärung zur SQL-Injection auf OWASP (Open Web Application Security Project)