Maison  >  Article  >  développement back-end  >  PHP implémente du code pour traiter les caractères d'échappement d'entrée

PHP implémente du code pour traiter les caractères d'échappement d'entrée

不言
不言original
2018-06-06 10:59:151894parcourir

Cet article présente principalement le code de traitement des caractères d'échappement d'entrée en PHP. Les amis qui en ont besoin peuvent s'y référer

Prenons d'abord une fonction qui vient d'être introduite dans WordPress 3.6

/**
 * Add slashes to a string or array of strings.
 *
 * This should be used when preparing data for core API that expects slashed data.
 * This should not be used to escape data going directly into an SQL query.
 *
 * @since 3.6.0
 *
 * @param string|array $value String or array of strings to slash.
 * @return string|array Slashed $value
 */
function wp_slash( $value ) {
    if ( is_array( $value ) ) {
        foreach ( $value as $k => $v ) {
            if ( is_array( $v ) ) {
                $value[$k] = wp_slash( $v );
            } else {
                $value[$k] = addslashes( $v );
            }
        }
    } else {
        $value = addslashes( $value );
    }
 
    return $value;
}


Expliquez d'abord une fonction intégrée de PHP : get_magic_quotes_gpc()

La fonction de cette fonction est d'obtenir la valeur de l'option magic_quotes_gpc dans le Paramètres php.ini.
Si la valeur de l'option magic_quotes_gpc est On, l'analyseur PHP ajoutera automatiquement le caractère d'échappement "" aux données de post, get et cookie pour garantir que ces données ne causeront pas de problèmes dans le programme, en particulier les instructions de base de données. à cause de caractères spéciaux.

Lorsqu'ils sont activés, les caractères tels que les guillemets simples ('), les guillemets doubles ("), les barres obliques inverses () et NUL (caractères NULL) seront dotés d'une barre oblique inverse, sinon ils doivent être traités manuellement. ()
renvoie 1 lorsque la valeur magic_quotes_gpc est activée, sinon renvoie 0
la fonction addslashes() ajoute une barre oblique inverse avant le caractère prédéfini spécifié, qui est le caractère répertorié ci-dessus 🎜>
Mais. la fonction intégrée get_magic_quotes_gpc() a été annulée dans PHP5.4 et versions ultérieures Afin d'éviter de futures erreurs, toutes les entrées sont filtrées comme ceci :


.
if(!function_exists(get_magic_quotes_gpc) || !get_magic_quotes_gpc() )) { 
  foreach(array('_COOKIE', '_POST', '_GET') as $v) { 
    foreach($$v as $kk => $vv) { 
      $kk{0} != '_' && $$v[$kk] = addslashes($vv); 
    } 
  } 
}


Lors du traitement des données MySQL et GET et POST, il est souvent nécessaire d'échapper aux guillemets des données

Il existe trois paramètres en PHP qui peuvent automatiquement convertir '(guillemets simples) , " (guillemets doubles). Les guillemets), (barre oblique inverse) et les caractères NULL sont échappés.

PHP appelle cela des guillemets magiques. Ces trois paramètres


magic_quotes_gpc


affectent les données des requêtes HTTP (GET, POST et COOKIES). Ne peut pas être modifié au moment de l'exécution. La valeur par défaut en PHP est activée.

Lorsque cette option est activée, les données transmises via GET, POST et COOKIE seront automatiquement échappées.

Par exemple, test.php?id=abc'de"f

echo $_GET['id']; # Vous obtiendrez abc'de"f

magic_quotes_gpc=On; activé, à droite L'écriture dans la base de données n'a aucun effet. Par exemple, si le $_GET['id'] ci-dessus est écrit dans la base de données, il sera toujours abc'de"f,


. Au contraire, si magic_quotes_gpc=Off; alors les caractères Avec des guillemets (que ce soit des guillemets simples ou des guillemets doubles), écrire directement sur mysql deviendra directement vide

Cependant, si vous l'écrivez dans le document au lieu de mysql, alors il sera abc'de"f


magic_quotes_runtime

Si activée, la plupart des fonctions qui obtiennent et renvoient des données à partir de sources externes, y compris les bases de données et les fichiers texte , renverra les données en s'échappant. Cette option peut être modifiée au moment de l'exécution et la valeur par défaut en PHP est désactivée.

magic_quotes_sybase

Si activé, les guillemets simples seront échappés en utilisant des guillemets simples au lieu de barres obliques inverses. Cette option remplace complètement magic_quotes_gpc. Si les deux options sont activées en même temps, les guillemets simples seront échappés dans ". Les guillemets doubles, les barres obliques inverses et les caractères NULL ne seront pas échappés.

Le contenu de mon formulaire était à l'origine : 242bdc569bb0d60e8bd1a2805064ef07

21cf59793a2ebb42c33f08b774b63f9e

Contre-mesure 1 : Modifier le fichier php.ini (je n'entrerai pas dans la méthode de modification de php.ini, vous pouvez google ensuite)

Contre-mesure 2 : Annulez l'échappement.

Étape 1 : Recherchez les données que vous avez soumises, telles que $_POST['content'], et remplacez-les par $content=stripslashes ($_POST ['content']);

Étape 2 : À l'avenir, remplacez $POST['content'] par $content

Étape 3 : Soumettez à la base de données, le stockage de la base de données est toujours normal : 242bdc569bb0d60e8bd1a2805064ef07 lire à voix haute comme

8f63fc65c04f2ef9d2d0881b14b01381 (Vous devriez savoir comment résoudre ce problème, n'est-ce pas ? Et si j'en ajoutais plus, attendez)

Étape 4 : Utilisez stripslashes() pour filtrer le contenu lu dans la base de données.

stripslashes() Cette fonction supprime la barre oblique inverse ajoutée par la fonction addlashes() Utilisée pour nettoyer les données récupérées. depuis la base de données ou le formulaire HTML

(

Si vous ne souhaitez pas que la situation suivante se produise dans la page PHP :

Le guillemet simple est échappé comme '

Les guillemets doubles sont échappé comme "

Ensuite, vous pouvez effectuer les paramètres suivants pour empêcher :
Défini dans php.ini : magic_quotes_gpc = Off)

Résumé comme suit :

1. Dans le cas de magic_quotes_gpc=on

,

nous ne pouvons pas effectuer les opérations addslashes() et stripslashes() sur les données de chaîne d'entrée et de sortie de la base de données, et les données seront affichées normalement .

Si vous effectuez addlashes() sur les données d'entrée à ce moment-là,
alors vous devez utiliser stripslashes() pour supprimer les barres obliques inverses en excès lors de la sortie.


2. Pour le cas de magic_quotes_gpc=off

Vous devez utiliser addlashes() pour traiter les données d'entrée, mais vous n'avez pas besoin d'utiliser stripslashes() pour formater la sortie
Parce que addlashes() n'écrit pas les barres obliques inverses dans la base de données, cela aide simplement mysql à terminer l'exécution de l'instruction SQL.

Recommandations associées :

PHP ajoute une barre oblique inverse avant la citation (PHP supprime la barre oblique inverse)



Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn