SQL-Injektion

Es geht bei SQL-Injection darum, dass man über Formulare oder URLs versucht, durch gezielte Eingaben, das ursprüngliche SQL-Statement, welches die Eingabe verarbeitet, auszuhebeln und eigenen SQL-Code auszuführen.

Beispiel beim Login: Als Username gebe ich folgendes ein:

fasse' --

Als Passwort gebe ich irgendetwas ein.

Das ursprüngliche SQL-Statement, welches diese Eingabe verarbeitet sieht normalerweise dann so aus:

SELECT COUNT(*) FROM adm_users WHERE usr_loginname = '". $_POST["name"]. "' 
AND usr_password = '". $_POST["password"]. "'

Nun setze ich den Inhalt der Variablen mal ein:

SELECT COUNT(*) FROM adm_users WHERE usr_loginname = 'fasse' --' AND usr_password = ' '

Durch mein Hochkomma direkt hinter fasse beende ich somit meinen Namen im SQL-Statement und sage durch die beiden Striche, dass alles danach Kommentar ist. Das Statement wird somit COUNT = 1 zurückgeben und angeblich gültige Logindaten gefunden haben, obwohl ich kein gültiges Passwort eingegeben habe.

In PHP gibt es den Parameter magic_quotes_gpc, welcher bei XAMPP im Standard aktiviert ist. Dieser setzt bei allen Übergabevariablen ($_POST, $_GET…) den Backslash vor allen Hochkomma. Ist dieser Parameter nicht aktiviert, so wird dies nun ab Admidio 1.5 mit Hilfe der Funktion addslashes() nachgeholt. Ein Aufruf der Funktion prepareSQL ist somit nicht mehr nötig und die Funktion wird dann auch demnächst entfernt.

  • de/entwickler/sql-injektion.txt
  • Last modified: 2008/06/15 17:50
  • by fasse