Es hängt davon ab, ob magic_quotes_gpc
en On
oder nicht auf Ihrem php.ini
Konfigurationsdatei.
Diese Konfigurationsrichtlinie wurde eingeführt, um Entwicklern zu helfen, sich gegen SQL-Einschleusung Angriffe. Wenn Sie nicht wissen, was das ist, empfehle ich Ihnen, den Wikipedia-Eintrag sehr sorgfältig zu lesen.
Die Sache ist die, die sich nur auf magic_quotes
unsicher und unberechenbar ist und diese Funktion wird auch in zukünftigen PHP-Versionen entfernt werden. Der beste Weg, sich gegen SQL-Injection zu schützen, ist entweder die Verwendung von Prepared Statements (mit PDO o MySQLi ) oder verwenden Sie die spezifische Escaping-Funktion für Ihre Datenbank:
Wenn jedoch magic_quotes
eingeschaltet ist und Sie versuchen, Ihre Eingabedaten zu escapen, besteht die Chance, dass Sie eine doppelt escapete Zeichenkette erhalten (was nicht gut ist), um dem entgegenzuwirken, erkennen wir normalerweise, ob magic_quotes
es On
und, falls ja, entfernen Sie die hinzugefügten Schrägstriche über stripslashes()
.
Manche tun dies vor dem Aufruf der Datenbank-Escaping-Funktion/-Methode, aber ich persönlich ziehe es vor, dies beim Laden der Seite zu tun, da dies die Daten viel konsistenter und weniger fehleranfällig macht. Wenn Sie PHP 5.3+ verwenden, sollte das folgende Snippet die Funktion deaktivieren magic_quotes
:
if (get_magic_quotes_gpc() === 1)
{
$_GET = json_decode(stripslashes(preg_replace('~\\\(?:0|a|b|f|n|r|t|v)~', '\\\$0', json_encode($_GET, JSON_HEX_APOS | JSON_HEX_QUOT))), true);
$_POST = json_decode(stripslashes(preg_replace('~\\\(?:0|a|b|f|n|r|t|v)~', '\\\$0', json_encode($_POST, JSON_HEX_APOS | JSON_HEX_QUOT))), true);
$_COOKIE = json_decode(stripslashes(preg_replace('~\\\(?:0|a|b|f|n|r|t|v)~', '\\\$0', json_encode($_COOKIE, JSON_HEX_APOS | JSON_HEX_QUOT))), true);
$_REQUEST = json_decode(stripslashes(preg_replace('~\\\(?:0|a|b|f|n|r|t|v)~', '\\\$0', json_encode($_REQUEST, JSON_HEX_APOS | JSON_HEX_QUOT))), true);
}
Wenn Sie eine ältere Version von PHP verwenden, Das PHP-Handbuch hat auch einen ziemlich guten Ausschnitt :
if (get_magic_quotes_gpc()) {
$process = array(&$_GET, &$_POST, &$_COOKIE, &$_REQUEST);
while (list($key, $val) = each($process)) {
foreach ($val as $k => $v) {
unset($process[$key][$k]);
if (is_array($v)) {
$process[$key][stripslashes($k)] = $v;
$process[] = &$process[$key][stripslashes($k)];
} else {
$process[$key][stripslashes($k)] = stripslashes($v);
}
}
}
unset($process);
}