Aktueller Standort: Startseite> Neueste Artikel> Häufige Fehler von GET_MAGIC_QUOTES_GPC -Funktion: Wie vermeiden Sie es, die magischen Zitate zu ignorieren?

Häufige Fehler von GET_MAGIC_QUOTES_GPC -Funktion: Wie vermeiden Sie es, die magischen Zitate zu ignorieren?

gitbox 2025-06-10

In früheren Versionen von PHP ist GET_MAGIC_QUOTES_GPC () eine Funktion, mit der festgestellt wird, ob "magische Zitate" aktiviert sind. Magische Zitate sind ein Mechanismus, mit dem PHP die Zitate in Benutzereingabedaten (z. B. $ _get , $ _post , $ _cookie ) automatisch entgeht, um SQL -Injektionsangriffe zu verhindern. Mit dem Upgrade der PHP -Version wurde diese Funktion jedoch als unsicher und verwirrend angesehen und schließlich in PHP 5.4 vollständig entfernt.

Dennoch verwenden viele alte Projekte und Codes immer noch Get_Magic_quotes_gpc () , und häufig treten häufig auftretende Fehler auf, insbesondere wenn die magischen Zitate ignoriert werden, was zu Datenverarbeitungsfehlern und sogar Sicherheitsrisiken führt. Dieser Artikel behandelt diese häufigen Fehler und wie man sie vermeidet.


1. Was sind magische Zitate?

Magische Zitate fügen automatisch Backslashes zu einzelnen Zitaten ( ' ), Double Quotes ( " ), Backslash ( \ ) und Null -Zeichen in den Eingabedaten hinzu. Zum Beispiel wird der Eingang, den O'Reilly , automatisch in O \' Reilly konvertiert wird.

Obwohl es die SQL -Injektion zu verhindern scheint, bringt es tatsächlich die folgenden Probleme mit sich:

  • Die Daten werden wiederholt entkommen, was zu einer String -Ausnahme führt.

  • Die Codelogik ist chaotisch und es ist schwer zu sagen, ob die Daten entkommen sind.

  • Entwickler neigen dazu, die Situation des Schließens der Zitate zu ignorieren.


2. Häufige Fehler in der Funktion get_magic_quotes_gpc

Fehler 1: Angenommen, die magischen Zitate sind immer eingeschaltet

 if (get_magic_quotes_gpc()) {
    $input = stripslashes($_GET['input']);
} else {
    $input = $_GET['input'];
}

Dieser Code geht davon aus, dass magische Zitate entweder eingeschaltet oder ausgeschaltet werden, und die Verarbeitungslogik berücksichtigt nur zwei dieser extremen Fälle. Wenn jedoch einige Eingaben nicht entkommen sind, nachdem die Zitate der Zitate geschlossen sind, zerstören die StripLashes -Operation die Daten.

Fehler 2: Es gibt keine Erkennung der Funktion

get_magic_quotes_gpc () ist in PHP 5.4 und später verworfen. Wenn der Code diese Funktion direkt aufruft, kann ein Fehler gemeldet werden:

 if (get_magic_quotes_gpc()) { // PHP 7+ Einen Fehler melden
    // ...
}

Fehler 3: Ignorieren Sie die Vielfalt von Datenquellen

Viele Entwickler verarbeiten nur einen bestimmten Teil der Daten in $ _get oder $ _post und ignorieren die möglichen Fluchtzeichen in anderen Hyperglobal -Variablen wie $ _cookie .


3. Wie kann man es vermeiden, die Situation der Schließung der Zitate zu ignorieren?

Lösung 1: Erkennen Sie, ob die Funktion existiert, und verhindern Sie Fehler

 if (function_exists('get_magic_quotes_gpc') && get_magic_quotes_gpc()) {
    $input = stripslashes($_GET['input']);
} else {
    $input = $_GET['input'];
}

Auf diese Weise wird es keinen Fehler verursachen, selbst wenn es in der neuen Version von PHP aufgerufen wird.


Lösung 2: Entfernen Sie einheitlich alle entkommenen Zeichen aus der Eingabe (wenn magische Zitate eingeschaltet sind)

 function clean_magic_quotes() {
    if (function_exists('get_magic_quotes_gpc') && get_magic_quotes_gpc()) {
        $_GET = array_map('stripslashes', $_GET);
        $_POST = array_map('stripslashes', $_POST);
        $_COOKIE = array_map('stripslashes', $_COOKIE);
    }
}

clean_magic_quotes();

Dieser Code stellt sicher, dass die automatisch hinzugefügten Escape -Zeichen unabhängig von der Eingabequelle einheitlich entfernt werden können, um Datenkonsistenzen zu vermeiden.


Lösung 3: Abschreibende magische Zitate und Verwendung moderner Sicherheitsmethoden

Da die magischen Zitate veraltet sind, wird empfohlen, die Funktion vollständig auszuschalten und sich nicht darauf zu verlassen, um die SQL -Injektion zu verhindern. Verwenden Sie stattdessen die folgende Methode:

  • Verwenden Sie vorbereitete Anweisungen und Parameterbindungen (z. B. PDO- oder MySQLI -Erweiterung).

  • Strenge Überprüfung und Filterung der Benutzereingabe.

  • Verwenden Sie Funktionen wie HTMLSpecialChars () , um XSS -Angriffe zu verhindern.

Beispielcode:

 $pdo = new PDO('mysql:host=gitbox.net;dbname=testdb', 'username', 'password');
$stmt = $pdo->prepare("SELECT * FROM users WHERE username = :username");
$stmt->execute(['username' => $_GET['username']]);
$results = $stmt->fetchAll();

4. Zusammenfassung

  • Verlassen Sie sich nicht auf magische Zitate , es ist ein veraltetes und unsicheres Design.

  • Wenn Sie den alten Code beibehalten, sollten Sie zuerst überprüfen, ob die Funktion vorhanden ist, bevor Sie GET_MAGIC_QUOTES_GPC () aufrufen.

  • Einheitlich aufräumten, entkommenen Zeichen in allen Eingabedaten, um Fehler zu vermeiden, die durch die lokale Verarbeitung verursacht werden.

  • Es ist am besten, den Code zu aktualisieren, magische Zitate vollständig aufzugeben und sicherere Datenbankzugriffs- und Datenfiltermethoden anzuwenden.

Durch die oben genannten Methoden können Sie die verschiedenen Probleme, die durch das Ignorieren der magischen Zitate verursacht werden, effektiv vermeiden und die Stabilität und Sicherheit des Codes sicherstellen.