Quand dois-je utiliser eval (en prenant une chaîne et exécuter code à l'exécution)?

voix
2

Je l'ai souvent entendu l'argument (en javascript, mais beaucoup de langues ont un eval comme caractéristique) que l'utilisation eval est « mauvais ». Les arguments étant que la plupart des choses que vous pensez à utiliser eval pour peut être fait d'autres moyens, le fait que eval est très lent dans la plupart des cas, et qu'il peut permettre aux utilisateurs de code d'entrée à exécuter (si les précautions appropriées n'a pas été prise ). Nous savons que la plupart des fonctionnalités ne sont pas seulement intrinsèquement « mauvais », mais laisse mais le feu des projecteurs sur eval,

Quelles sont certaines des utilisations valides de eval? (En plus d'offrir une fonctionnalité intéressante pour les développeurs débogage de l'application)

Créé 26/08/2009 à 23:20
source utilisateur
Dans d'autres langues...                            


7 réponses

voix
7

Une boucle d'impression-eval lecture serait généralement mis en œuvre en utilisant eval.

Créé 26/08/2009 à 23:24
source utilisateur

voix
6

eval () a bons et mauvais points. Le pire aspect de eval dans toutes les langues qui le soutient est qu'il ouvre la porte large pour les trous de sécurité. Si un exploiteur peut comprendre comment obtenir un code personnalisé écrit-il dans une déclaration eval dans votre application, puis il a probablement la capacité de faire toutes sortes de choses abominables comme des données privées ou voler désactiver les services que votre application fournit. La performance est une autre préoccupation que vous avez déjà fait part de.

Eval brille vraiment dans les zones où votre code peut avoir besoin pour générer dynamiquement autre code pour effectuer une tâche complexe facilement. Je ne peux pas penser à un exemple en ce moment, mais tous les cas où vous avez besoin de faire est probablement pas être trivial. Je vous conseille de faire ce que lorsque cela est absolument nécessaire pour réduire au minimum le risque du point i fait au paragraphe précédent cependant. Si possible, l'entrée d'utilisateur Ne faites jamais confiance comme suffisamment sûr pour utiliser eval avec.

Créé 26/08/2009 à 23:32
source utilisateur

voix
2

L'écueil de eval est le même qui vient avec injection SQL. Si vous construisez la chaîne dynamique dans votre code et appeler eval sur cette amende. Mais si votre code est aveugle concaténer entrée utilisateur dans une chaîne à eval'd alors vous demander. Il existe de nombreux cas où eval peuvent être utiles, mais les gens ont tendance à l'éviter parce qu'il ya d'autres façons de contourner la nécessité d'un eval.

Créé 26/08/2009 à 23:28
source utilisateur

voix
1

Il fait Méta un jeu d' enfant. Si vous souhaitez analyser un programme d' une certaine manière ( par exemple pour le débogage ou le profilage des fins).

Créé 26/08/2009 à 23:53
source utilisateur

voix
0

La seule utilisation légitime pour evalest pour l' exécution d'un code que vous avez aucun contrôle sur (que vous ne devriez jamais faire à moins que vous faire un bac à sable javascript ).

Créé 27/08/2009 à 04:03
source utilisateur

voix
0

J'ai écrit un script CGI Perl dont la sortie était le code perl, qui a été récupéré par un autre script sur une autre machine et eval () 'd. Il était sûr que parce que je contrôlais des deux extrémités, mais il a certainement résolu un problème qui autrement me aurait fallu inventer une sorte de format de sérialisation à une époque avant XML est largement connu.

Créé 26/08/2009 à 23:41
source utilisateur

voix
0

JSON d'une décodage source fiable. L'évaluation d'une expression entrée par l'utilisateur comme dans une calculatrice graphique. Ne peut pas penser à trop de choses, mais il a été abusé un peu de retour dans la fin des années 90 par des gens qui ne voulaient pas apprendre les bonnes façons d'accéder à des éléments de page.

Créé 26/08/2009 à 23:29
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more