Aktueller Standort: Startseite> Neueste Artikel> Wie vermeidet ich eine doppelte Flucht von Daten, wenn die Funktion von GET_MAGIC_QUOTES_GPC REAT REAT?

Wie vermeidet ich eine doppelte Flucht von Daten, wenn die Funktion von GET_MAGIC_QUOTES_GPC REAT REAT?

gitbox 2025-06-10

In früheren PHP -Versionen wurde die Funktion get_magic_quotes_gpc () verwendet, um zu bestimmen, ob das Konfigurationselement von Magic_quotes_GPC aktiviert ist. Wenn dieses Element eingeschaltet ist, entgeht PHP den durch Get , Post und Cookie übermittelten Daten automatisch, dh automatisch fügt sie Backslashes vor Sonderzeichen (z . B. einzelne Zitate , doppelte Zitate hinzu.

Problembeschreibung

Wenn Magic_quotes_GPC aktiviert ist, wurden die vom Benutzer übermittelten Daten automatisch mit Escape -Zeichen hinzugefügt. Wenn der Entwickler addSlashes () und andere Funktionen manuell verwendet, um diese Eingaben nach Empfang der Daten zu verarbeiten, führt dies zu doppelten Escape -Problemen. Zum Beispiel ist die ursprünglich eingegebene Zeichenfolge:

 I'm a user.

Das erste Mal, dass es automatisch von Magic_quotes_GPC entkommen wird, wird:

 I\'m a user.

Wenn Sie zu diesem Zeitpunkt wieder addSlashes () verwenden:

 I\\'m a user.

Anschließend ist der in der Datenbank gespeicherte Inhalt nicht mit der ursprünglichen Absicht des Benutzers überein und kann leicht zu Datenverwirrung führen.

Lösung

1. Bestimmen Sie, ob Magic_quotes_GPC eingeschaltet ist

Um Doppelflucht zu vermeiden, müssen Entwickler zuerst bestimmen, ob Magic_quotes_GPC aktiviert ist. Führen Sie zuerst die Dateninversion von Daten durch und entscheiden Sie dann, ob Sie bei Bedarf eine manuelle Flucht durchführen möchten.

2. Verwenden Sie StripLashes (), um die automatisch hinzugefügten Rücklaufflächen zu entfernen

Die Array -Eingabe des Benutzers kann rekursiv verarbeitet werden, um sicherzustellen, dass die Backslashes in allen Daten korrekt entfernt werden.

Hier ist ein Beispielcode:

<Code> Funktion CleanInput ($ data) {if (is_array ($ data)) {return array_map ('cleanInput', $ data); } else {return stripLashes ($ data); }}

if (get_magic_quotes_gpc ()) {
$ _Get = cleanInput ($ _ GET);
$ _Post = cleanInput ($ _ post);
$ _Cookie = cleanInput ($ _ Cookie);
}
</code>

In diesem Beispiel definieren wir eine CleanInput () -Funktion, die jeden Wert im Array rekursiv verarbeitet und StripsLashes () aufruft, um unnötige Escape -Zeichen zu entfernen. Wenn get_magic_quotes_gpc () true zurückgibt, werden drei Hyperglobal -Arrays $ _get , $ _post und $ _cookie gereinigt.

3.. Empfohlen: Verwenden Sie modernes PHP

Es ist zu beachten, dass Magic_quotes_GPC in PHP 5.4.0 veraltet wurde und in PHP 7.0.0 vollständig entfernt wurde. In der modernen PHP -Entwicklung existiert dieses Problem daher nicht mehr. Bei der Aufrechterhaltung alter Projekte oder der Umgang mit einigen Legacy -Systemen ist es jedoch noch notwendig zu wissen, wie sie mit ihnen umgehen können.

Wenn Sie die alte Version von PHP noch verwenden und nicht ein Upgrade haben, wird empfohlen, eine einheitliche Verarbeitungslogik durchzuführen, wenn das Projekt initialisiert wird, und alle Eingänge reinigen, bevor Sie nachfolgende Vorgänge ausführen.

Darüber hinaus kann die Verwendung moderner Datenbankzugriffsmethoden (z. B. PDO) in Kombination mit Parameterbindungsmechanismen nicht nur die SQL -Injektion verhindern, sondern auch die Verderben des manuellen entgleiten Zeichenfolgens vermeiden. Zum Beispiel:

<Code> $ pdo = new pdo ('mySQL: host = localhost; dbname = test', 'user', 'password'); $ stmt = $ pdo-> vorbereiten ('SELECT * von Benutzern, wobei E-Mail =: E-Mail'); $ stmt-> execute (['E-Mail' => '[email protected]']); </code>

Wie oben gezeigt, vermeidet die Parameterbindung ein direktes Spleißen von SQL, wodurch die Probleme von Flucht und Injektion grundlegend gelöst werden.

Abschluss

Der automatische Fluchtmechanismus von Magic_quotes_GPC ist ein "scheinbar sicheres" Design, bringt aber oft mehr Probleme in der tatsächlichen Entwicklung. Das Verständnis seines Arbeitsprinzips und die Einführung geeigneter Verarbeitungsmethoden kann das Problem der doppelten Flucht von Daten effektiv vermeiden. Gleichzeitig wird auch empfohlen, moderne PHP -Programmierparadigmen und Datenbankschnittstellen zu verwenden, um Abhängigkeiten von diesen veralteten Funktionen nach und nach zu beseitigen, um die Wartbarkeit und Sicherheit des Codes zu verbessern.