Funktion addslashes() - Bestimmte Zeichen mit Backslash maskieren

Bei Datenbankabfragen haben bestimmte Zeichen wie einfache oder doppelte Anführungszeichen (' oder ") eine besondere Bedeutung. Wenn man beispielsweise einen Eintrag in die Datenbank durchführen möchte, beginnt und endet der einzutragende Inhalt mit einem einfachen Hochkomma. Falls ein einzutragender String einfache Hochkommas enthält, müssen diese maskiert werden, damit sie nicht dafür sorgen, dass der einzutragende Inhalt an der Stelle endet. Wenn der String beispielsweise das Wort Ku'damm enthält, würde versucht werden, Ku in die Datenbank zu schreiben. Der Rest würde entfallen und mit einer hohen Wahrscheinlichkeit würde aufgrund eines Syntaxfehlers der komplette Vorgang abgebrochen werden. Zusätzlich würde das ein Sicherheitsrisiko darstellen.

Sofern das Datenbanksystem das Maskieren mit einem Backslash unterstützt, kann man für die Maskierung einiger Sonderzeichen die Funktion addslashes() verwenden. Die Funktion sorgt dafür, dass den folgenden Zeichen ein Backslash \ vorangestellt wird. Diesen Vorgang nennt man auch Escapen.

  • Einfache Hochkommas '
  • Doppelte Hochkommas "
  • Backslash \
  • Nullbyte

Aus Sicherheitsgründen sollte addslashes() nur ersatzweise verwendet werden, wenn das Datenbanksystem keine eigene Maskierungsfunktion besitzt. Für MySQL gibt es z.B. die Escape-Funktionen mysql_real_escape_string() oder mysqli_real_escape_string(). Außerdem sollte addslashes() nicht verwendet werden, wenn die PHP-Direktive magic_quotes_gpc aktiviert ist und angewendet wird, da es ansonsten zu doppelten Maskierungen kommen kann. Die Direktive sorgt nämlich bereits automatisch dafür, dass die Funktion addslashes() auf alle GET-, POST- und COOKIE-Daten angewendet wird und war vor PHP 5.4 standardmäßig aktiviert. Als Parameter für addslashes() ist nur ein Wert vorgesehen.

  1. Der String, in dem die Zeichen maskiert werden sollen (string).

Der Rückgabewert der Funktion ist ein String, in dem die Zeichen ', ", \ oder das Nullbyte maskiert sind. Im folgenden Beispiel wird das einfache Hochkomma im Wort Ku'damm maskiert und der Rückgabewert ist Ku\'damm.

<?php

$str = "Ku'damm";

// Ausgabe Ku\'damm
echo addslashes($str);

?>

Um zu überprüfen, ob magic_quotes_gpc aktiviert ist, kann man den Rückgabewert der Funktion get_magic_quotes_gpc() mit einer if-, else-Abfrage auswerten. Der Rückgabewert ist TRUE, falls es aktiviert. Falls nicht, wird FALSE zurückgegeben.

<?php

if (get_magic_quotes_gpc() == TRUE)  
{ 
  echo 'magic_quotes_gpc ist eingeschaltet'; 
}
else
{
  echo 'magic_quotes_gpc ist ausgeschaltet'; 
}

?>

Manchen Programmierern geht das bloße Escapen mit einem Backslash nicht weit genug und sie verwenden eigene Funktionen, um gewisse Zeichen umzuwandeln. Mit der folgenden Funktion werden die Zeichen in Entity-Nummern umgewandelt.

<?php

function escape_array($str)
{
  return strtr($str, array(
    "\0" => "",
    "'"  => "&#39;",
    "\"" => "&#34;",
    "\\" => "&#92;",
    "<"  => "&lt;",
    ">"  => "&gt;",
  ));
}

$str = "Ku'damm";

// Ausgabe Ku&#39;damm
echo escape_array($str);

?>

Das Umwandeln in Entity-Nummern erhöht die Sicherheit und im Browser werden die Zeichen trotzdem wie gewünscht dargestellt. Für ein einfaches Hochkomma gilt beispielsweise die Entity-Nummer &#39;. Die Funktion stripslashes() ist das Gegenstück zu addslashes(). Damit werden die Maskierungszeichen \ aus einem String wieder entfernt.