Eval

Eval

Eval est une fonction utilisée en programmation. Elle est présente dans de nombreux langages interprétés 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.

Fonctionnement

Voici un exemple en php, 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 au cours de l'exécution permet facilement de :

  • Placer du code dans une base de données pour une exécution ultérieure
  • Permettre quelques raccourcis d'écriture ou des "astuces" pour simplifier la programmation
  • Exécuter un fichier extérieur
  • Accéder dynamiquement à une variable ou une fonction à partir de son nom
  • Protéger du code (en décodant à la volée le code source protégé)

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é. 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 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".

Problème de sécurité en php

Eval est un vrai 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)
code html

ne permet que "Connexion()" "Deconnexion()" et "Lecture()"

Attaque

créer sa propre page html qui entre une autre valeur comme "HidingAccess()"

Protection

vérifier avant de lancer eval que $input fait partie des valeurs autorisées.


Quelques conseils pour éviter des problèmes avec eval :

  • TOUJOURS vérifier une valeur entrée dans eval si elle dépend d'une donnée extérieure
  • Si $input est une valeur parmi une liste de valeurs, vérifier que $input est bien dedans (cela est valable aussi pour les fonctions include et require en PHP)
  • Ne JAMAIS faire confiance aux entrées de l'utilisateur (ceci est valable pour toutes les entrées dans tous les programmes, mais plus particulièrement pour ces cas-là). L'utilisateur ne se privera pas de mettre votre programme à l'épreuve.
  • Utiliser au maximum des caractères d'échappement (En PHP, la fonction mysql_escape_string protège les accès aux bases de données, html_entities protège les affichages HTML).
  • Ce n'est pas parce que $input ne présente pas de danger pour le programme que vous faites qu'il ne faut pas penser aux autres programmes liés (le HTML ou base de donnée liés souvent à du code PHP)
  • Si vous attendez un chiffre, vérifiez que c'est un chiffre, si vous attendez un nom, vérifiez que c'est un nom. Souvent, les langages utilisant eval n'ont pas de variables typées. Et les is_digit ou is_boolean sont faits pour ces cas-là.

Wikimedia Foundation. 2010.

Contenu soumis à la licence CC-BY-SA. Source : Article Eval de Wikipédia en français (auteurs)

Игры ⚽ Поможем написать курсовую

Regardez d'autres dictionnaires:

  • Eval — Saltar a navegación, búsqueda Eval en varios lenguajes de programación, es una función que evalúa el contenido pasado como parámetro como si fuera una expresión. Funciones como eval son más comunes en lenguajes de programación interpretados que… …   Wikipedia Español

  • Eval — ist eine besondere Programmierungsfunktion zur Metaprogrammierung, mit der ein Interpreter (oder das Paar Compiler/Laufzeitsystem) angewiesen wird, ein in der Programmiersprache selbst geschriebenes Codefragment, das als Datenobjekt vorliegt,… …   Deutsch Wikipedia

  • eval — eval·u·ate; eval·u·a·tion; eval·u·a·tive; eval·u·a·tor; …   English syllables

  • Eval — E val ([=e] val), a. [L. aevum lifetime, age, eternity.] Relating to time or duration. [Obs.] [1913 Webster] …   The Collaborative International Dictionary of English

  • Eval — In some programming languages, eval is a function which eval uates a string as though it were an expression and returns a result; in others, it executes multiple lines of code as though they had been included instead of the line including the… …   Wikipedia

  • Eval Apartments — (Саранда,Албания) Категория отеля: 4 звездочный отель Адрес: Rr. Turizem Kanali i Çu …   Каталог отелей

  • eval — abbreviation evaluation …   New Collegiate Dictionary

  • EVAL — Evaluation (Governmental » Military) * Poly(Ethylene Vinyl Alcohol) (Miscellaneous » Plastics) …   Abbreviations dictionary

  • eval — evaluate, evaluated, evaluation …   Medical dictionary

  • EVAL — Evaluate/Evaluation NASA …   Acronyms

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”