„Magic Quotes“ in PHP abstellen

„Magic Quotes“ ist die Bezeichnung für einen Mechanismus in PHP, der vor Anführungszeichen und Hochkommas in Variablen, die von „außen“ in ein Script einfliessen (URL-Parameter, Datenbankfelder, Textdateien etc.), einen Backslash (\) setzt.

Beispiel:

Aus "Hallo Welt" wird \"Hallo Welt\"
und 'anderes Wort' wird zu \'anderes Wort\'

Meistens stört dieser Mechanismus mehr, als er nützt, da man stripslashes() für solche Variablen verwenden muss, bevor man sie verwenden kann – und man muss trotzdem noch prüfen, ob das überhaupt notwendig ist und man darf diese Funktion nicht verwenden, falls Magic Quotes nicht eingeschaltet sind.

Um potentielle Sicherheitsprobleme, wie SQL-Injection, zu vermeiden, sollte man ohnehin andere Verfahren einsetzen, wie z.B. Prepared Statements.

Codefragment, um Magic Quotes zur Laufzeit zu umgehen

Um das Verhalten von Magic Quotes zu beeinflussen, müssen die entsprechenden Einstellungen in der PHP-Konfiguration (php.ini) angepasst werden. Ist dies nicht möglich, kann man mit folgendem Codefragment am Beginn eines Scripts den gleichen Effekt erreichen:

disable_magicquotes.php
<?php
ini_set('magic_quotes_runtime', 0);
 
if(get_magic_quotes_gpc())
{
  $superglobals=array(
    "_REQUEST",
    "_GET",
    "_POST",
    "_COOKIE",
    "_ENV",
    "_SERVER");
 
  foreach($superglobals as $globalname)
  {
    foreach($GLOBALS[$globalname] as $name => $value)
    {
      if(!is_array($value))
      {
        $GLOBALS[$globalname][$name] = stripslashes($value);
      }
    }
  }
 
  unset($superglobals);
}
?>

Am einfachsten ist, dieses Fragment als Datei zu speichern und mit include() bei Bedarf in allen Scripten einzubinden.