SQL-Injection: So sicherst du deine Datenbank ab
SQL-Injections stellen für relationale Datenbankmodelle und die darin gespeicherten Informationen eine große Gefahr dar. Ein umfassender Schutz gegen diese unbefugten externen Zugriffe, die durch Sicherheitslücken möglich werden, ist daher essenziell.
Was ist eine SQL-Injection?
Unter einer SQL-Injection (dt. SQL-Einschleusung) versteht man das Ausnutzen einer Sicherheitslücke in relationalen Datenbanksystemen, die bei der Dateneingabe auf die Abfragesprache SQL zurückgreifen. Angreifer:innen machen sich dabei solche Benutzereingaben zunutze, die nicht ausreichend maskiert sind und Metazeichen wie den doppelten Bindestrich, Anführungszeichen oder das Semikolon enthalten. Diese Zeichen besitzen Sonderfunktionen für den SQL-Interpreter und erlauben die externe Beeinflussung der ausgeführten Befehle. Oft tritt eine SQL-Injection im Zusammenhang mit PHP- und ASP-Programmen auf, die auf ältere Interfaces zurückgreifen. Hier erhalten die Eingaben in einigen Fällen nicht die notwendige Maskierung und sind damit das perfekte Ziel für einen Angriff.
Mit dem gezielten Einsatz von Funktionszeichen kann eine unberechtigte Person auf diese Weise weitere SQL-Befehle einschleusen und die Einträge derart manipulieren, dass sie Daten verändern, löschen oder lesen kann. In gravierenden Fällen ist es sogar möglich, dass sich Angreifer:innen auf diesem Wege den Zugriff auf die Kommandozeile des befehlsausführenden Systems und damit auf den gesamten Datenbankserver verschaffen.
SQL-Injection-Beispiele: So funktionieren die Datenbank-Angriffe
Da anfällige Datenbankserver schnell aufgespürt und SQL-Injection-Attacken ebenso einfach ausgeführt werden können, gehört die Methode weltweit zu den beliebtesten. Dabei agieren Kriminelle mit verschiedenen Angriffsmustern und machen sich aktuelle, aber vor allem auch altbekannte Sicherheitslücken der am Datenmanagementprozess beteiligten Anwendungen zunutze. Um zu verdeutlichen, wie genau eine SQL-Injection funktioniert, folgen exemplarisch zwei typische Methoden.
Beispiel 1: Zugriff über eine mangelhaft maskierte Benutzereingabe
Damit Nutzer:innen auf eine Datenbank zugreifen können, müssen sie sich für gewöhnlich zunächst authentifizieren. Zu diesem Zweck existieren Skripte, die beispielsweise ein Login-Formular bestehend aus Nutzername und Passwort präsentieren. Die Kundschaft füllt das Formular aus und das Skript überprüft im Anschluss, ob in der Datenbank entsprechende Einträge existieren. Standardmäßig sind hierfür in der Datenbank eine Tabelle mit dem Namen users sowie den Spalten username