8
votes

Quelles sont les situations demandant l'utilisation de EVAL () car il n'y a pas d'alternative?

Je sais eval 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 .

Dans quelles situations spécifiques devriez-vous utiliser eval car il n'y a pas d'autre solution autour de celui-ci?

Pour plus de clarté:

Nous ne parlons pas de données fournies par l'utilisateur. La question est donc axée sur l'utilisation de EVAL EVAL .


0 commentaires

5 Réponses :


0
votes

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.

eval est Evil en PHP aussi.

Dans quelles situations spécifiques devriez-vous utiliser eval () parce qu'il n'y a pas d'autre chemin autour de ça?

Tout d'abord, nous essayons de éviter tout le plus possible 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 .

la ligne de fond:

Ne jamais autoriser en tout cas, l'utilisateur de l'utilisateur doit être exécuté avec eval . (à moins que vous sachiez ce que vous faites / risquez)


2 commentaires

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 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



10
votes

Les problèmes de sécurité de eval 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.

Les implications de sécurité peuvent même être plus grandes, car PHP a accès à votre base de données (entre autres) - ce qui signifie qu'il peut être utilisé pour voler / corrompre presque Avery Informations sur!

En JavaScript, ils disent que "eval est mauvais "; C'est probablement aussi vrai dans PHP que c'est vrai dans JavaScript.


Maintenant, à propos de situations spécifiques dans lesquelles vous ne pouvez pas éviter d'utiliser eval ... 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 dans mon propre code ^^

Néannuel, et exemple de situation où vous avez besoin eval 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.


2 commentaires

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 que dans JavaScript en raison de l'accès au disque, à la base de données et au réseau arbitraire.



0
votes

Je suis complètement d'accord avec les réponses précédentes au point que eval est diabolique et je ne l'utilise jamais dans mon code.

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 eval . 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: xxx < / pré>

(parce que vous ne pouvez pas simplement écrire $ classname :: MethodName () );


3 commentaires

Call_user_funcun (Array ($ CLASSNAME, 'METHODNAME'))) ou CALL_USER_FUNCUNC ("$ CLASSNAME :: METHODNAME") , 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)



0
votes

Si vous souhaitez utiliser des fonctions anonymes avant PHP 5.3, vous devez utiliser Créer_function , qui enveloppe un appel EVAL ().


0 commentaires

2
votes

eval et create_function peut 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.

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é tant que vous comprenez exactement ce que vous faites .

Mais une discussion sur les langages de programmation à un tel niveau abstrait n'est pas ce que Stackoverflow est à propos.

c.


0 commentaires