SQL-Injection-Attacke

Nicht nur unsere selbst erstellten PHP-Skripte, sondern auch die dahinterliegenden Datenbankserver mit den Datenbanken sind zu schützen. Sicherlich ist es immer wieder nötig, Variablen aus Formularen oder URLs in ein SQL-Kommando zu übernehmen. Beispielsweise muss, wenn ein Benutzer sich einloggt und die Benutzerdaten in der SQL-Datenbank liegen, eine SQL-Abfrage nach dem Passwort gestartet werden:

Dies sieht zunächst einmal nicht wie an Angriffsziel aus. Allerdings, wenn bedacht wird, dass für die Variable benutzer aus dem Netz beliebiger Inhalt eingesetzt kann, könnte der Angreifer folgendes in diese Variable einfügen:

benutzer = "‘; DROP DATABASE benutzerdatenbank;

Dies hat den Effekt, dass die komplette SQL-Abfrage nach dem Einfügen der sehr merkwürdig aussehenden Variablenbelegung wie folgt zusammengestellt worden ist:

Ein neues SQL-Kommando ist unberechtigt eingeschleust worden, welches bei der Ausführung unsere vollständige Datenbank löscht. Auch Anführungszeichen vor und hinter der Variable haben diesen Angriff nicht abwehren können. Die dazwischen geschobene Variable schließt die Variable mit dem einfachen Anführungszeichen einfach zunächst ab, bevor die eigene Anfrage angehängt wird.

Gegen diese Art der Attacke hilft wiederum eine restriktive Prüfung des übergebenen Strings. Alternativ lassen sich auch mit der Methode mysqli_real_escape_string() bösartige Strings mit Anführungszeichen verändern, so dass alle Anführungszeichen escaped sind und damit nicht auf Kommandoebene, sondern auf Variableebene betrachtet werden. Ein einfaches Escapen von gefährlichen Zeichen mit addslashes() reicht jedoch nicht aus.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert