Glossar

/ SQL-Injection

SQL-Injection

Kategorie Sicherheit

Mit SQL-Injection ist eine Sicherheitslücke gemeint, bei der von Nutzern stammende Inhalte in SQL Statemente eingefügt werden. Wenn diese Inhalte so manipuliert sind, dass sie den SQL Befehl in der Struktur verändern, hat man eine Lücke. Je nach Konfiguration können dadurch Daten erfragt werden, die der Nutzer nicht sehen sollte oder es können Daten verändert/gelöscht werden. Der schlimmste Fall ist, dass über den SQL-Server Befehle im Betriebssystem ausgelöst werden können. Dann ist das System so gut wie übernommen.

Angenommen das SQL Statement wird wie folgt gebaut:
Select * from users where username='"+inputdata.username+"'

Wenn jetzt inputdata.username durch den Angreifer so gestaltet wird:
' or 1=1 or '1'='

Das Resultat ist dann:
Select * from users where username='' or 1=1 or '1'=''

Dann hat man nicht mehr ein Statement, das nur den gewünschten Nutzer zurück liefert, sondern alle Nutzer. Noch schlimmer ist, daß häufig der Administrator der erste Nutzer in der Userliste ist. Dadurch kann sich ein Angreifer ggf. sogar als Administrator ausgeben.

Wenn das Statement ein UPDATE wäre, dann könnte ein Angreifer so die Datenbank unbrauchbar machen oder Daten nach eigenen Wünschen verändern. Manchmal lassen sich auch zusätzliche Statement einschleusen, wie z.B. ein DROP TABLE oder ähnliches. SQL-Injections bieten also ein riesiges Gefahrenpotential und dürfen nicht auf die leichte Schulter genommen werden!

Gegenmaßnahmen:

Prepared Statements benutzen oder sehr restriktiv mit einer Whitelist die möglichen Werte filtern.