Magische Anführungszeichen sind eine häufige Frage für PHPer. Ich habe heute zufällig einen Artikel gesehen, kombiniert mit dem PHP-Handbuch und seinen Antworten, ich werde hier eine einfache Zusammenfassung erstellen.
Kurz gesagt: Magic-Anführungszeichen maskieren beim Einschalten automatisch die eingegebenen Daten. Darunter werden alle einfachen Anführungszeichen ('), doppelten Anführungszeichen ("), Backslashes und NULL-Zeichen maskiert (ein Backslash wird hinzugefügt). Tatsächlich ruft dieser Vorgang im Wesentlichen die Addslashes-Funktion auf.
Warum Magic-Anführungszeichen verwenden?
Bequem und schnell
Die Entwickler von PHP hatten von Anfang an eine schnelle und komfortable Programmierung im Auge. Beim Einfügen in eine Datenbank werden Magic-Anführungszeichen beispielsweise automatisch den Daten entzogen, was sehr praktisch ist.
Gut für Anfänger
Magic Quotes können Anfängern bis zu einem gewissen Grad dabei helfen, die Sicherheitsrisiken von Skripten zu vermeiden. Beispielsweise verringert die Aktivierung von Magic-Anführungszeichen in Code ohne Schutzmaßnahmen viele Risiken, wie z. B. Injektionsprobleme. Mit dieser Methode allein können solche Sicherheitsprobleme natürlich nicht vollständig verhindert werden.
„Ich habe keine Erlaubnis, es zu schließen“
Natürlich ist Ihnen dieses Problem bekannt, aber der Host-Bereich steht nicht vollständig unter Ihrer Kontrolle.
Warum nicht Magic-Zitate verwenden?
Portabilität Unabhängig davon, ob diese Funktion aktiviert ist oder nicht, wirkt sie sich auf die Portabilität des Skripts aus, da sie sich auf unsere nachfolgenden Vorgänge zum Filtern der Daten auswirkt.
Leistungsprobleme Alle externen Daten werden vor dem Abruf maskiert, was zweifellos die Laufzeitkosten erhöht (und nicht alle Daten müssen maskiert werden).
Verwirrung stiften Wie oben erwähnt müssen nicht alle Daten maskiert werden. Eine Situation, die auftreten kann, ist, wenn Sie die Stripslashes-Funktion „crazy“ verwenden, um nicht entschlüsselte Daten zu erhalten.
PHP6 wird nicht mehr unterstützt
Die Entwickler von PHP haben offenbar ihren „Fehler“ erkannt und ihn in PHP6 als veraltet erklärt.
So deaktivieren Sie Magic Quotes
Meiner Meinung nach ist es am zuverlässigsten, die Konfigurationsdatei php.ini zu verwenden, um Magic-Anführungszeichen global zu deaktivieren. Siehe den Code unten
; Magic Quotes für eingehende GET/POST/Cookie-Daten.magic_quotes_gpc = Aus; Magic Quotes für zur Laufzeit generierte Daten, z. B. Daten aus SQL, von exec() usw.magic_quotes_runtime = Aus; Magische Anführungszeichen im Sybase-Stil (Escape ' mit '' statt ').magic_quotes_sybase = Aus Der Online-Host erlaubt Ihnen jedoch möglicherweise nicht, die php.ini-Datei zu ändern, sodass Sie sie mit der .htaccess-Datei deaktivieren und hinzufügen können Folgender Code:
php_flag magic_quotes_gpc Aus Das Obige kann Bei portiertem Code müssen die Daten konsistent bleiben, unabhängig davon, ob magic_quotes deaktiviert ist. Dann kann Ihnen der folgende Code helfen
<?phpif (get_magic_quotes_gpc()) {function stripeslashes_deep($value) {$value = is_array($value) ?array_map('stripslashes_deep', $value) :stripslashes($value);return $ value;}$_GET = array_map('stripslashes_deep', $_GET);$_POST = array_map('stripslashes_deep', $_POST);$_COOKIE = array_map('stripslashes_deep', $_COOKIE);$_REQUEST = array_map('stripslashes_deep' , $_REQUEST);}