En informatique, dans certains langages de programmation, la fonction eval est une fonction utilisée en programmation. Elle est présente dans de nombreux langages interprétés, comme Lisp, Python, PHP, JavaScript, et 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 en PHP, ces deux lignes sont absolument équivalentes :
$c = 1 + $b; echo $c;
eval('$c = 1 + $b; echo $c;');
Une évaluation à travers une chaîne de caractères au cours de l'exécution permet facilement de :
Puisqu'un programme utilisant eval ne peut pas être complètement compilé (on peut toujours avoir besoin d'un élément dans un eval, donc nombre d'optimisations habituelles sont très compliquées), ces programmes sont par nature plus lents qu'un programme compilé[réf. nécessaire]. Ceci en considérant qu'on utilise eval sans en avoir besoin, car ses raccourcis d'écriture permettent une programmation plus rapide.
Malgré la puissance 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ée[Par qui ?] comme « superflue » et « sale »[réf. nécessaire].
Eval pose un problème au niveau de la sécurité en PHP, surtout pour les programmes qui ont 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 qui sera exécutée.
Un exemple d'une attaque par eval en PHP :
$input = $_POST['action'];
eval($input)
ne permet que "Connexion()" "Deconnexion()" et "Lecture()"
créer sa propre page html qui entre une autre valeur comme "HidingAccess()"
vérifier avant de lancer eval que $input fait partie des valeurs autorisées.
Quelques conseils pour éviter des problèmes avec eval :