Eval es complementario a la compilación que se usa para crear plantillas para el código. Por plantilla quiero decir que escribes un generador de plantillas simplificado que genera un código de plantilla útil que aumenta la velocidad de desarrollo.
He escrito un marco, donde los desarrolladores no usan EVAL, pero usan nuestro marco y, a su vez, ese marco tiene que usar EVAL para generar plantillas.
El rendimiento de EVAL puede aumentarse utilizando el siguiente método; en lugar de ejecutar el script, debe devolver una función.
var a = eval("3 + 5");
Debería organizarse como
var f = eval("(function(a,b) { return a + b; })");
var a = f(3,5);
El almacenamiento en caché de f sin duda mejorará la velocidad.
También Chrome permite la depuración de tales funciones con mucha facilidad.
En cuanto a la seguridad, el uso de eval o not no hará ninguna diferencia,
- En primer lugar, el navegador invoca todo el script en una caja de arena.
- Cualquier código que sea malo en EVAL, es malo en el navegador mismo. El atacante o cualquier persona puede inyectar fácilmente un nodo de script en DOM y hacer cualquier cosa si puede evaluar cualquier cosa. No usar EVAL no hará ninguna diferencia.
- La mayor parte de la seguridad del lado del servidor es perjudicial. La mala validación de las cookies o la implementación deficiente de ACL en el servidor causa la mayoría de los ataques.
- Una vulnerabilidad reciente de Java, etc., estaba presente en el código nativo de Java. JavaScript se diseñó y se diseñó para ejecutarse en un entorno limitado, mientras que los applets se diseñaron para ejecutarse fuera de un entorno limitado con certificados, etc.
- Escribir código para imitar un navegador no es difícil. Todo lo que tiene que hacer es realizar una solicitud HTTP al servidor con su cadena de agente de usuario favorita. Todas las herramientas de prueba se burlan de los navegadores de todos modos; Si un atacante quiere hacerte daño, EVAL es su último recurso. Tienen muchas otras formas de lidiar con la seguridad del lado del servidor.
- El navegador DOM no tiene acceso a los archivos y no tiene un nombre de usuario. De hecho, nada en la máquina a la que eval pueda dar acceso.
Si la seguridad del lado del servidor es lo suficientemente sólida como para que cualquiera pueda atacar desde cualquier lugar, no debe preocuparse por EVAL. Como mencioné, si EVAL no existiera, los atacantes tienen muchas herramientas para hackear su servidor independientemente de la capacidad EVAL de su navegador.
Eval solo es bueno para generar algunas plantillas para hacer un procesamiento de cadenas complejo basado en algo que no se usa de antemano. Por ejemplo, preferiré
"FirstName + ' ' + LastName"
Opuesto a
"LastName + ' ' + FirstName"
Como mi nombre para mostrar, que puede provenir de una base de datos y que no está codificado.