Maison  >  Article  >  développement back-end  >  Une brève discussion sur la sécurité des variables variables PHP

Une brève discussion sur la sécurité des variables variables PHP

怪我咯
怪我咯original
2017-06-20 09:48:271514parcourir

Les variables variables sont une fonctionnalité très pratique de PHP. Comme mentionné dans le manuel, Variables variables signifie que le nom de variable d'une variable peut être défini dynamiquement !
Alors, quels problèmes de sécurité surgiront si le nom de la variable peut être défini dynamiquement ? Jetons un coup d'oeil :

<?php
$a = &#39;phpinfo&#39;;
$a();
?>

Ce code est facile à comprendre. Le type de la variable est le caractère phpinfo () est ajouté dynamiquement à la variable, donc la variable devient la fonction phpinfo et est exécutée dynamiquement. !

Selon le même principe, nous citons l'exemple des variables variables dans le manuel :

<?php
$a = &#39;phpinfo&#39;;
${$a()};
?>

Cette fonction dynamique y met des variables dynamiques. ma déclaration n'est pas un peu professionnelle. , ou une variable variable, nous constaterons que la fonction phpinfo est toujours exécutée !

Si vous avez lu le manuel et l'exemple que j'ai donné, vous devez sentir que ce n'est pas du tout magique. C'est la caractéristique grammaticale de PHP, et ensuite nous ferons évoluer cette chose en une seule ligne :

<?php
 
$a = "${${phpinfo()}}";
 
?>

Il s'agit de deux variables variables imbriquées. Nous remplissons simplement nous-mêmes le contenu des variables variables selon l'exemple ci-dessus. En fait, nous attribuons une certaine fonction à une certaine variable, donc la fonction phpinfo Quand. il a finalement été exécuté, il est devenu un prototype de diverses vulnérabilités et webshells !

Tout le monde devrait savoir après avoir lu ceci, pourquoi les experts m'ont demandé de lire le Manuel PHP, mais cet article se termine ici, nous avons raté un petit peu, Monsieur. Cela dit, la sécurité est la base, nous n'avons pas encore compris cela. Pourquoi les variables de l'exemple précédent utilisent-elles des guillemets simples, alors que l'exemple final utilise des guillemets doubles ? Si vous avez réfléchi à ce problème, je pense que vous devriez absolument le faire. a un grand potentiel, et cela pourrait devenir un gros problème à l'avenir !

La différence entre les guillemets simples et les guillemets doubles en PHP est toujours liée aux variables. Jetons un coup d'œil à l'exemple suivant :

<?php
$a = &#39;phpinfo()&#39;;
echo $a; //输出phpinfo()字符串
echo &#39;$a&#39;; //输出$a字符串
echo "$a"; //输出phpinfo()字符串
?>

Le contenu des guillemets doubles sera analysé par. Les variables de syntaxe de PHP, et Le contenu entre guillemets simples est directement qualifié de chaîne !

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