Eval est complémentaire à la compilation qui est utilisée dans le modèle du code. Par modèle, je veux dire que vous écrivez un générateur de modèle simplifié qui génère un code de modèle utile qui augmente la vitesse de développement.
J'ai écrit un cadre, où les développeurs n'utilisent pas EVAL, mais ils utilisent notre cadre et à son tour ce cadre doit utiliser EVAL pour générer des modèles.
Les performances d'EVAL peuvent être améliorées en utilisant la méthode suivante; au lieu d'exécuter le script, vous devez renvoyer une fonction.
var a = eval("3 + 5");
Il devrait être organisé comme
var f = eval("(function(a,b) { return a + b; })");
var a = f(3,5);
La mise en cache f améliorera certainement la vitesse.
Chrome permet également de déboguer de telles fonctions très facilement.
En ce qui concerne la sécurité, utiliser eval ou non ne fera guère de différence,
- Tout d'abord, le navigateur invoque l'intégralité du script dans un bac à sable.
- Tout code qui est mauvais dans EVAL, est mauvais dans le navigateur lui-même. L'attaquant ou n'importe qui peut facilement injecter un nœud de script dans DOM et faire n'importe quoi s'il peut évaluer quoi que ce soit. Ne pas utiliser EVAL ne fera aucune différence.
- C'est surtout une mauvaise sécurité côté serveur qui est nuisible. Une mauvaise validation des cookies ou une mauvaise mise en œuvre de l'ACL sur le serveur provoque la plupart des attaques.
- Une récente vulnérabilité Java, etc. était présente dans le code natif de Java. JavaScript a été et est conçu pour s'exécuter dans un bac à sable, tandis que les applets ont été conçues pour s'exécuter en dehors d'un bac à sable avec des certificats, etc., qui entraînent des vulnérabilités et bien d'autres choses.
- Écrire du code pour imiter un navigateur n'est pas difficile. Tout ce que vous avez à faire est de faire une requête HTTP au serveur avec votre chaîne d'agent utilisateur préférée. De toute façon, tous les outils de test se moquent des navigateurs; si un attaquant veut vous faire du mal, EVAL est leur dernier recours. Ils ont de nombreuses autres façons de gérer votre sécurité côté serveur.
- Le navigateur DOM n'a pas accès aux fichiers et pas à un nom d'utilisateur. En fait, rien sur la machine auquel eval ne peut donner accès.
Si votre sécurité côté serveur est suffisamment solide pour que quiconque puisse attaquer de n'importe où, vous ne devriez pas vous soucier d'EVAL. Comme je l'ai mentionné, si EVAL n'existait pas, les attaquants ont de nombreux outils pour pirater votre serveur indépendamment de la capacité EVAL de votre navigateur.
Eval ne sert qu'à générer des modèles pour effectuer un traitement de chaîne complexe basé sur quelque chose qui n'est pas utilisé à l'avance. Par exemple, je préférerai
"FirstName + ' ' + LastName"
Par opposition à
"LastName + ' ' + FirstName"
Comme mon nom d'affichage, qui peut provenir d'une base de données et qui n'est pas codé en dur.