Eval è complementare alla compilazione che viene utilizzata nel modello del codice. Per modello intendo che scrivi un generatore di template semplificato che genera un utile codice template che aumenta la velocità di sviluppo.
Ho scritto un framework in cui gli sviluppatori non usano EVAL, ma usano il nostro framework e a sua volta quel framework deve usare EVAL per generare template.
Le prestazioni di EVAL possono essere aumentate utilizzando il seguente metodo; invece di eseguire lo script, è necessario restituire una funzione.
var a = eval("3 + 5");
Dovrebbe essere organizzato come
var f = eval("(function(a,b) { return a + b; })");
var a = f(3,5);
La memorizzazione nella cache f migliorerà sicuramente la velocità.
Inoltre Chrome consente il debug di tali funzioni molto facilmente.
Per quanto riguarda la sicurezza, l'utilizzo di eval o no non farà praticamente alcuna differenza,
- Innanzitutto, il browser richiama l'intero script in una sandbox.
- Qualsiasi codice che è male in EVAL, è cattivo nel browser stesso. L'aggressore o chiunque può facilmente iniettare un nodo di script in DOM e fare qualsiasi cosa se può valutare qualsiasi cosa. Non usare EVAL non farà alcuna differenza.
- È soprattutto una scarsa sicurezza sul lato server che è dannosa. Una scarsa convalida dei cookie o una scarsa implementazione dell'ACL sul server causano la maggior parte degli attacchi.
- Una recente vulnerabilità di Java, ecc. Era presente nel codice nativo di Java. JavaScript era ed è progettato per funzionare in un sandbox, mentre le applet sono state progettate per funzionare all'esterno di un sandbox con certificati, ecc. Che portano a vulnerabilità e molte altre cose.
- Scrivere codice per imitare un browser non è difficile. Tutto quello che devi fare è inviare una richiesta HTTP al server con la tua stringa agente utente preferita. Tutti gli strumenti di test simulano comunque i browser; se un attaccante vuole farti del male, EVAL è la sua ultima risorsa. Esistono molti altri modi per gestire la sicurezza lato server.
- Il DOM del browser non ha accesso ai file e non un nome utente. In realtà nulla sulla macchina a cui Eval può dare accesso.
Se la tua sicurezza lato server è abbastanza solida da consentire a chiunque di attaccare da qualsiasi luogo, non dovresti preoccuparti di EVAL. Come ho già detto, se EVAL non esistesse, gli aggressori hanno molti strumenti per hackerare il tuo server indipendentemente dalla capacità EVAL del tuo browser.
Eval è utile solo per generare alcuni modelli per eseguire elaborazioni di stringhe complesse basate su qualcosa che non viene utilizzato in anticipo. Ad esempio, preferirò
"FirstName + ' ' + LastName"
Al contrario di
"LastName + ' ' + FirstName"
Come il mio nome visualizzato, che può provenire da un database e che non è codificato.