magic_quotes_gpc

Die magic_quotes_gpc Funktionalität liefert immer wieder Anlass zu Diskussionen. Sie ist ein Mechanismus, der auf vom Benutzer übermittelte  Werte in $_GET, $_POST und $_COOKIE wirkt und vor dem einfachen und dem doppelten Anführungszeichen (' und "), dem Backslash (\) sowie dem NUL (das Null-Byte) einen zusätzlichen Backslash einfügt.

Auf den ersten Blick ist das scheinbar eine wirkungsvolle Methode, z.B. SQL-Injektionen zu vermeiden - es gibt allerdings zwei große Haken:

  • Magic_quotes_gpc wirkt nicht auf Daten aus anderen Quellen
  • Die Backslashes in $_GET, $_POST und $_COOKIE Werten müssen - falls nicht für die Verwendung in DB-Statements gedacht - wieder mit stripslashes() aufbereitet werden.

Als Alternative sollte man die Werte immer nur explizit vor der Verwendung in Datenbank-Statements aufbereiten, bei der Verwendung von mysql als Datenbank optimalerweise via mysql_escape_string() bzw. mysql_real_escape_string() - dabei werden dann auch genau die richtigen Zeichen mit einem Backslash maskiert.

Magic_quotes_gpc ist also lediglich ein veralteter Mechanismus, der ursprünglich einmal SQL-Injektionen verhindern sollte, diese Funktionalität aber nur unzureichend erfüllt und stattdessen bei der Verwendung störende Nebenwirkungen (wie unerwünschte Maskierung aber auch teilweise Probleme bei Uploads) hervorruft.

Aus heutiger Sicht sollte man auf die Alternativen mysql_escape_string() bzw. mysql_real_escape_string() - oder vergleichbare Funktionen aus der Datenbankabstraktion - aufbauen.


Netzwerke