Eval est une fonction utilisée en programmation. Elle est présente dans de nombreux langages interprétés (Comme le PHP ou le Javascript). Eval permet d'exécuter une commande à partir d'une chaîne de caractères (ou String) générée par le programme lui-même en cours d'exécution. Voici un exemple, ces deux lignes sont absolument équivalentes :
a = 1 + b; print c; eval("a = 1 + b; print c:");
Une évaluation à travers une chaîne de caractères (En informatique, une chaîne de caractères est une suite ordonnée de caractères....) au cours de l'exécution permet facilement de :
Puisqu'un programme utilisant eval ne peut pas être complètement (Le complètement ou complètement automatique, ou encore par anglicisme complétion ou...) compilé (on peut toujours avoir besoin (Les besoins se situent au niveau de l'interaction entre l'individu et l'environnement. Il est...) d'un élément dans un eval, donc nombre (La notion de nombre en linguistique est traitée à l’article « Nombre...) d'optimisations habituelles sont très compliquées), ces programmes sont par nature plus lents qu'un programme compilé. Ceci en considérant qu'on utilise eval sans en avoir besoin, car ses raccourcis d'écriture permettent une programmation plus rapide. De plus, le langage utilisé peut optimiser cette fonction de sorte qu'il est des fois préférables de l'utiliser plutôt que d'essayer d'arriver au même résultat sans eval.
Malgré la puissance (Le mot puissance est employé dans plusieurs domaines avec une signification particulière :) de cette fonction et de ses possibilités, eval n'est pas très utilisé. Et ceci car son utilisation rend le code plus complexe à comprendre et en partie car cette fonction est considéré comme "superflue" et "sale".
Eval est un vrai problème au niveau de la sécurité. Surtout pour les programmes qui on accès à des données confidentielles. Il est fortement conseillé de vérifier au maximum la façon de générer la chaîne (Le mot chaîne peut avoir plusieurs significations :) qui sera exécutée.
Un exemple d'une attaque par eval en php (PHP (sigle de PHP: Hypertext Preprocessor), est un langage de scripts libre principalement...)
code php: $imput = POST['action']; eval($imput)
code html : ne permet que "Connexion()" "Deconnexion()" et "Lecture()"
Attaque : créer sa propre page html qui entre une autre valeur comme "HiddingAcces()"
Protection : Vérifier avant de lancer eval que $imput fait partie des valeurs autorisées.
Quelques conseil pour éviter des problèmes avec eval :