SQL-Injection
SQL-Injection: So schützen Sie Ihre Webserver vor Hackerangriffen
SQL-Injections gehören zu den häufigsten Angriffsmethoden auf Web-Applikations- und Datenbankservern. Internet Magazin zeigt, wie Sie einen Webserver abschirmen und Hacker in Schach halten.
- SQL-Injection: So schützen Sie Ihre Webserver vor Hackerangriffen
- Teil 2: SQL-Injection: So schützen Sie Ihre Webserver vor Hackerangriffen
- Teil 3: SQL-Injection: So schützen Sie Ihre Webserver vor Hackerangriffen
- Teil 4: SQL-Injection: So schützen Sie Ihre Webserver vor Hackerangriffen
- Teil 5: SQL-Injection: So schützen Sie Ihre Webserver vor Hackerangriffen
- Teil 6: SQL-Injection: So schützen Sie Ihre Webserver vor Hackerangriffen

Datenbanken zählen zu den beliebtesten Angriffszielen, denn sie halten meist große Mengen wertvoller Information in konzentrierter Form bereit. Bei einer SQL-Injection nutzt der Angreifer eine Sicherheitslücke in Web-Applikationen aus, die aus der Übernahme unzureichend geprüfter und nicht bereinigter Daten in eine SQL-Datenbank resultiert.Im Artikel "PHP-Filter" wurde im Detail aufgezeigt, dass die Eingabe in eine Web-Applikation gefiltert und die Ausgabe ausmaskiert werden muss. Unterlässt man diese beiden Vorsichtsmaßnahmen beim Einsatz einer SQL-Datenbank, so öffnet man Tür und Tor für SQL-Injections.In der SQL-Syntax haben bestimmte Metazeichen wie das Anführungszeichen, der Apostroph, der umgekehrte Schrägstrich und das Semikolon eine eigene Bedeutung. Werden Benutzereingaben, zum Beispiel aus Formularfeldern, ungefiltert an den SQL-Interpreter weitergegeben, werden sie von ihm ausgeführt.Dadurch lassen sich andere Sicherheitsmechanismen der Web-Applikation wie etwa das Login umgehen. Werden die Daten bei einer Datenbankabfrage unmaskiert ausgegeben, können sie wiederum mit der Syntax der Datenbankabfrage kollidieren und Datenbankfehler erzeugen.
Nicht bereinigte Anführungszeichen
Bei einer SQL-Injection nutzt der Angreifer ein Formulareingabefeld oder sendet eine Zeichenkette an ein auf dem Server befindliches Skript, welches Parameter über die URL entgegennimmt. Reagiert der SQL-Parser bereits auf ein einzelnes Anführungszeichen mit einem Fehler (etwa "500 server error"), ist es ein sicheres Zeichen, dass die Eingabe nicht bereinigt wurde und die Datenbank verwundbar ist.
Da die Struktur einer SQL-Datenbank dem Angreifer in der Regel unbekannt ist, benötigen Hacker meist mehrere Anläufe, um Schwachpunkte ausfindig zu machen. Liefert der Parser informative Fehler, kann der Angreifer durch etwas Raten und Herumprobieren den Aufbau der Datenbank schrittweise ermitteln.
Oft bietet die Webseite recht informative Hinweise wie die Namen von Variablen, die Datenbankfeldern gleichen (etwa im Quelltext der Formularfelder), die Namen einiger Benutzer (auf der Impressum-Seite) et cetera.
Schwächen in Web-Formularen
Angenommen, ein Angreifer kennt weder die Zugangsdaten zur Datenbank noch ihre genaue Struktur. Ein Angreifer, der mit einem Formular zum Einloggen konfrontiert wird, spekuliert über die Weise, wie die Abfrage zur Validierung des Benutzernamens und des Passwortes funktioniert.

Ein Blick in den HTML-Quelltext gibt meist schon zu viel preis. Besonders leicht hat es der Angreifer, wenn die gewählten Namen leicht zu erraten sind, etwa wenn der Benutzername in der Variable $benutzername und das Passwort in der Variable $passwort gespeichert werden und die zugehörigen Datenbankfelder genauso heißen:
<form action="/login.php" method=
"POST"><p>Benutzername: <input type=
"text" name="benutzername" /></p><p>Passwort: <input type="password"
name="passwort" /></p><p><input type="submit"
value="submit" /></p></form>
Wer aber meint, dass kreative Variablennamen wie etwa $namedesbenutzers und$ sicherheitspasswt statt $benutzername und $passwort sich als Sicherheitsmaßnahme qualifizieren, der irrt leider.
mysql_error() im Deployment
Manche Web-Entwickler bieten den Hackern unfreiwilligerweise hilfreiche Anhaltspunkte, indem sie etwa mysql_error() nutzen. Solange man seinen Quelltext debuggen muss, ist dieser Ansatz zu begrüßen, doch sobald die Webseite in der finalen Deployment-Fassung vorliegt, ist der Einsatz von mysql_error eher als eine Sicherheitslücke zu bezeichnen, da es potenziellen Hackern viel zu viele Informationen preisgibt, zum Beispiel: