Position actuelle: Accueil> Derniers articles> Erreurs communes de Get_Magic_Quotes_GPC Fonction: Comment éviter d'ignorer les citations magiques?

Erreurs communes de Get_Magic_Quotes_GPC Fonction: Comment éviter d'ignorer les citations magiques?

gitbox 2025-06-10

Dans les versions antérieures de PHP, get_magic_quotes_gpc () est une fonction utilisée pour détecter si les "citations magiques" sont activées. Les devis magiques sont un mécanisme par lequel PHP échappe automatiquement aux devis dans les données d'entrée utilisateur (tels que $ _get , $ _post , $ _cookie ) dans le but de prévenir les attaques d'injection SQL. Cependant, avec la mise à niveau de la version PHP, cette fonction a été considérée comme à la fois dangereuse et déroutante, et a finalement été complètement supprimée dans PHP 5.4.

Néanmoins, de nombreux anciens projets et codes utilisent toujours GET_MAGIC_QUOTES_GPC () , et des erreurs courantes se produisent souvent, en particulier lorsqu'ils ignorent les citations magiques, entraînant des erreurs de traitement des données et même des risques de sécurité. Cet article couvrira ces erreurs courantes et comment les éviter.


1. Quelles sont les citations magiques?

Les citations magiques ajouteront automatiquement des barres à barres à des citations simples ( ' ), des citations doubles ( " ), des barres arrière ( \ ) et des caractères nuls dans les données d'entrée. Par exemple, l'entrée O'Reilly sera automatiquement convertie en o \' Reilly .

Bien qu'il semble empêcher l'injection de SQL, il apporte en fait les problèmes suivants:

  • Les données sont échappées à plusieurs reprises, ce qui entraîne une exception de chaîne.

  • La logique du code est chaotique et il est difficile de dire si les données ont été échappées.

  • Les développeurs ont tendance à ignorer la situation de fermeture des citations magiques.


2. Erreurs courantes dans la fonction GET_MAGIC_QUOTES_GPC

Erreur 1: Supposons que les citations magiques sont toujours activées

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

Ce code suppose que les citations magiques sont activées ou désactivées, et la logique de traitement ne considère que deux de ces cas extrêmes. Mais si certaines entrées ne sont pas échappées après la fermeture des citations magiques, l'opération de rayures détruira les données.

Erreur 2: Aucune détection de la fonction n'existe

get_magic_quotes_gpc () est jeté dans PHP 5.4 et plus tard. Si le code appelle cette fonction directement, une erreur peut être signalée:

 if (get_magic_quotes_gpc()) { // PHP 7+ Signaler une erreur
    // ...
}

Erreur 3: ignorer la diversité des sources de données

De nombreux développeurs ne traitent qu'une certaine partie des données dans $ _get ou $ _post , et ignorent les caractères d'évasion possibles dans d'autres variables hyperglobales telles que $ _cookie .


3. Comment éviter d'ignorer la situation de fermeture des citations magiques?

Solution 1: détecter si la fonction existe et empêcher les erreurs

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

De cette façon, même s'il est appelé dans la nouvelle version de PHP, cela ne provoquera pas d'erreur.


Solution 2: Supprimez de manière unifiée tous les caractères échappés de l'entrée (si les citations magiques sont activées)

 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();

Ce code garantit que quelle que soit la source d'entrée, les caractères d'échappement ajoutés automatiquement peuvent être supprimés uniformément pour éviter les incohérences de données.


Solution 3: Démouter des citations magiques et utiliser des méthodes de sécurité modernes

Étant donné que les citations magiques sont obsolètes, il est recommandé de désactiver complètement la fonctionnalité et de ne pas compter sur lui pour empêcher l'injection de SQL. Utilisez plutôt la méthode suivante:

  • Utilisez des instructions préparées et des liaisons de paramètres (telles que l'OPD ou l'extension MySQLI).

  • Vérification stricte et filtrage de l'entrée utilisateur.

  • Utilisez des fonctions telles que htmlSpecialChars () pour empêcher les attaques XSS.

Exemple de code:

 $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. Résumé

  • Ne comptez pas sur des citations magiques , c'est un design obsolète et dangereux.

  • Si vous maintenez l'ancien code, vous devez d'abord vérifier si la fonction existe avant d'appeler get_magic_quotes_gpc () .

  • Nettoyez les caractères échappés de manière unifiée dans toutes les données d'entrée pour éviter les erreurs causées par le traitement local.

  • Il est préférable de mettre à niveau le code, d'abandonner complètement les citations magiques et d'adopter des méthodes d'accès et de filtrage de données plus sûres.

Grâce aux méthodes ci-dessus, vous pouvez éviter efficacement les divers problèmes causés par l'ignorance des citations magiques et assurer la stabilité et la sécurité du code.