Skip to main content
SQL-Injection ist eine Angriffstechnik, bei der Angreifer bösartigen SQL-Code in Eingabefelder einer Anwendung einschleusen, um die dahinterliegende Datenbank zu manipulieren oder auszulesen. Der Angriff funktioniert, wenn Benutzereingaben ungeprüft in SQL-Abfragen eingebaut werden.

Ziele und Folgen

Ein erfolgreicher Angriff kann folgende Folgen haben:
  • Datensätze hinzufügen
  • Datensätze ändern
  • Datensätze löschen
  • ganze Tabellen oder Datenbanken verändern
  • Zugriff auf sensible Daten (z. B. Benutzerkonten, Passwörter)
  • Auslesen vertraulicher Informationen
  • Angreifer können sich Administratorrechte verschaffen
  • Rechte anderer Nutzer ändern oder entziehen
  • Ersetzen von Webseiten
  • Einfügen von schädlichen Dateien
  • Ausspionieren von Nutzern oder Systemdaten

Ursachen

SQL-Injection entsteht durch unsichere Programmierung, z. B.:
  • Fehlende Hochkommas in SQL-Abfragen
  • Keine Typenprüfung von Eingaben
  • Keine Längenprüfung
  • Keine Maskierung von Sonderzeichen (z. B. ’ oder —)
  • Direkte Übernahme von Benutzereingaben in SQL-Befehle

Angriffsformen

Angreifer verändern bestehende SQL-Abfragen, um:
  • logische Bedingungen zu manipulieren
  • Teilabfragen zu entfernen
  • neue SQL-Befehle einzufügen
  • Fehlermeldungen zu erzeugen
  • den Datenbankprozess zu beeinflussen

Beispiel

Folgender Code wird auf eine Login-Seite ausgeführt:
$query = "SELECT * FROM users WHERE user='" . $_POST['username'] . "' 
AND password='" . $_POST['password'] . "'";
Dieser Code überprüft Benutzername und Passwort in der Datenbank. Nun kann der Hacker folgende Eingaben machen:
admin
' OR 'a'='a
Dies ergibt folgende SQL-Abfrage:
SELECT * FROM users 
WHERE user='admin' AND password='' OR 'a'='a'
Da ‘a’=‘a’ immer wahr ist, wird die Bedingung erfüllt. Der Angreifer wird eingeloggt, ohne das Passwort zu kennen.