SQL Injection
SQL-Injection nutzt Webanwendungen aus, die es versäumen, Benutzereingaben zu validieren. Hacker können böswillig SQL-Befehle durch die Webanwendung zur Ausführung an eine Backend-Datenbank übergeben.
SQL-Injection kann unautorisierten Zugang zu einer Datenbank erlangen oder Informationen direkt aus der Datenbank abrufen. Viele Datenschutzverletzungen sind auf SQL-Injection zurückzuführen.
Funktionsweise
Nach Eingabe von Benutzername und Passwort arbeiten die SQL-Abfragen hinter der Benutzeroberfläche wie folgt:
"SELECT Count(*) FROM Users WHERE Username=' " + txt.User.Text+" ' AND Password=' "+ txt.Password.Text+" ' ";
Angenommen, der Benutzer gibt den Benutzernamen: admin und das Passwort: passwd123 ein, dann läuft nach dem Klick auf den Log-in-Button die SQL-Abfrage wie folgt:
"SELECT Count(*) FROM Users WHERE Username=' admin ' AND Password=' passwd123 ' ";
Wenn die Anmeldedaten korrekt sind, darf der Benutzer sich anmelden. Es ist ein sehr einfaches (und daher unsicheres) Mechanismus. Hacker nutzen diese Unsicherheit aus, um unautorisierten Zugang zu erhalten.
Hacker verwenden einen einfachen String, genannt „Magical String“, beispielsweise:
Benutzername: admin
Passwort: anything 'or'1'='1
Nach dem Klick auf den Anmelde-Button funktioniert die SQL-Abfrage wie folgt:
"SELECT Count(*) FROM Users WHERE Username=' admin ' AND Password=' anything 'or'1'='1 ' ";
Betrachten Sie den Passwortabschnitt der obigen Abfrage genauer.
Password=' anything 'or'1'='1 '
Das Passwort ist nicht „anything“, daher ergibt password=anything FALSE, aber '1'='1' ist eine TRUE-Anweisung und liefert daher einen TRUE-Wert zurück. Schließlich ist durch den OR-Operator der Wert (FALSE OR TRUE) TRUE, sodass die Authentifizierung erfolgreich umgangen wird. Nur aufgrund eines einfachen Strings (Magical String) ist die gesamte Datenbank kompromittiert.
Wie man es verhindert
Bevor die Abfragen für die Benutzeranmeldedaten durchgeführt werden, nehmen Sie Änderungen vor wie die folgenden:
$id = $_GET["id"]
(1) $id = stripslashes($id)
(2) $id = mysql_real_escape_String($id)
Dadurch wird (1) jedes einfache Anführungszeichen (') im Eingabestring durch doppelte Anführungszeichen (") ersetzt, und (2) vor jedem (') wird ein Slash (/) hinzugefügt. Der überarbeitete Magical String kann die Authentifizierung nicht mehr umgehen, und Ihre Datenbank bleibt sicher.
Siehe auch
- SQL-Injection auf Wikipedia
- Erklärung von SQL-Injection bei OWASP (Open Web Application Security Project)