Je sais Dans quelles situations spécifiques devriez-vous utiliser Pour plus de clarté: p>
Nous ne parlons pas de données fournies par l'utilisateur. La question est donc axée sur l'utilisation de eval code> doit être évité dans JavaScript pour des raisons de rapidité et de sécurité. Mais dans le cas de PHP, la sécurité est rarement jamais mentionnée. Plus souvent, votre programme fonctionne plus lentement qu'il ne devrait en raison d'une utilisation au hasard de
eval code>. P>
eval code> car il n'y a pas d'autre solution autour de celui-ci? P>
EVAL CODE> EVAL P>. P>
5 Réponses :
Je sais que eval devrait être évité dans JavaScript pour la vitesse et la sécurité les raisons. Mais dans le cas de PHP, est rarement la sécurité jamais mentionnée. plus souvent c'est votre programme en cours d'exécution plus lent que cela devrait à cause de Utilisation au hasard de EVAL. P> blockQuote>
eval code> est Evil strong> en PHP aussi. P>
Dans quelles situations spécifiques devriez-vous utiliser eval () parce qu'il n'y a pas d'autre chemin autour de ça? p> blockQuote>
Tout d'abord, nous essayons de éviter tout le plus possible em> que possible, mais si vous devez l'utiliser pour exécuter du code, vous devrez ensuite y aller, mais comme indiqué que c'est mal, vous utilisez à votre Péritable Risk em>. p>
la ligne de fond: strong> p>
Ne jamais autoriser en tout cas, l'utilisateur de l'utilisateur doit être exécuté avec eval code>. strong> (à moins que vous sachiez ce que vous faites / risquez) p>
L'OP n'a pas dit que c'était avec des données fournies par l'utilisateur, que cette base d'article son (très bref) argument sur. Il a demandé s'il y avait des situations valables pour l'utiliser. Clairement, en utilisant eval code> sur ATA fourni par l'utilisateur n'est pas valide, mais cela ne répond pas vraiment à la question.
@Crowder: "Je sais que l'EVAL devrait être évité dans JavaScript pour des raisons de rapidité et de sécurité. Mais dans le cas de PHP, la sécurité est rarement jamais mentionnée." En supposant que cela ne soit pas mentionné comme méchant dans PHP :) J'ai également discuté de la situation de la situation / de l'utilisation. Merci
Les problèmes de sécurité de Les implications de sécurité peuvent même être plus grandes, car PHP a accès à votre base de données (entre autres) em> - ce qui signifie qu'il peut être utilisé pour voler / corrompre presque Avery Informations sur! p>
En JavaScript, ils disent que "eval est mauvais em>"; C'est probablement aussi vrai dans PHP que c'est vrai dans JavaScript. P>
Néannuel, et exemple de situation où vous avez besoin eval code> Code de -eutation avec Eval In PHP sont les mêmes que dans JavaScript: Si vous évaluez du code, vous devez être sûr d'où cela vient et ce qu'il contient. p>
Maintenant, à propos de situations spécifiques dans lesquelles vous ne pouvez pas éviter d'utiliser eval code> ... Eh bien, dans quelque chose comme 4 ans de développement de PHP en tant que travail de tous les jours, je ne me souviens pas d'avoir déjà utilisé
Eval code> dans mon propre code ^^ p>
eval code> serait lorsque vous stockez du code dans la base de données, par exemple, et non la mise en cache dans les fichiers (qui pourrait être inclus) < / EM> - Cela se produit avec certains CMS qui permettent de saisir des portions de code PHP dans la section d'administration, par exemple. P>
Entièrement d'accord. Je serais plus prudent avec PHP Eval que JS Eval, et je ne me souviens pas d'une instance où j'en avais besoin.
+1 Je dirais que c'est définitivement plus mauvais dans PHP B> que dans JavaScript en raison de l'accès au disque, à la base de données et au réseau arbitraire.
Je suis complètement d'accord avec les réponses précédentes au point que Mais dans une situation, je n'ai pas réussi à éviter les évaluations. Je n'ai pas beaucoup d'expérience dans PHP, alors je serai heureux que quelqu'un me conseille comment puis-je réécrire le code sans (parce que vous ne pouvez pas simplement écrire eval code> est diabolique et je ne l'utilise jamais dans mon code.
eval code>. Dans cette situation, j'ai eu un nom de classe stocké dans une variable et j'ai dû appeler une méthode statique sur cette classe, la noille de classe est issue d'une source de confiance, alors je devais écrire quelque chose comme ceci: p>
$ classname :: MethodName () code>); p> p>
Call_user_funcun (Array ($ CLASSNAME, 'METHODNAME'))) CODE> ou
CALL_USER_FUNCUNC ("$ CLASSNAME :: METHODNAME") CODE>, en fonction de votre version de php.
call_user_funcunc (Array ($ classname, $ MethodName)); devrait marcher. Modifier: Konforce a eu devant moi :)
Il y a le même problème avec la sécurité, mais la performance est meilleure ... ne sais pas pourquoi je n'ai pas pensé à l'utiliser)
Si vous souhaitez utiliser des fonctions anonymes avant PHP 5.3, vous devez utiliser Créer_function , qui enveloppe un appel EVAL (). P>
eval et create_function peut strong> permettre une injection de code arbitaciaire. Il y a beaucoup de choses dans PHP qui peuvent être utilisées pour compromettre la sécurité de votre application. P>
Nous disons aux enfants de ne pas jouer avec des couteaux et des correspondances - mais ce sont des outils utiles (si non essentiels) lorsqu'ils sont utilisés correctement. Donc, c'est avec beaucoup de fonctionnalités de PHP. Il n'y a rien de mal intrinsèquement avec l'utilisation de la fonctionnalité Mais une discussion sur les langages de programmation à un tel niveau abstrait n'est pas ce que Stackoverflow est à propos. P>
c. p>