El eval() es una función JS incorporada que evalúa los argumentos que son expresiones y ejecuta una o más declaraciones dadas como argumentos.
Razón por la que eval() se considera mal: Hay varios problemas que presenta el uso de eval() y, de entre todos, el rendimiento y la inyección de código se consideran los más problemáticos. Rendimiento: dado que el compilador de secuencias de comandos no puede precompilar eval() , ejecuta el compilador incluso cuando el código se compila durante el tiempo de ejecución. Aunque no mucho, esto aún degrada el rendimiento.
Es complicado: la mayoría de los casos en los que se usa eval() ni siquiera lo requieren tanto. Entonces, en casos como estos, se prefiere un enfoque alternativo más que eval() . Inyección de código : eval() ejecuta una string como un código y es mucho más fácil para los piratas informáticos acceder a información privilegiada simplemente mediante el uso de eval() . Esta es una gran amenaza para la seguridad cuando un programa recibe información del usuario y se ejecuta en el lado del cliente. Esto, a su vez, puede continuar manipulando el programa original en sí.
Más difícil de depurar, mientras que la depuración requiere doble trabajo.
Ejemplo:
HTML
<!DOCTYPE html> <html> <head> <title></title> </head> <body> <script type="text/javascript"> var a=eval("4+3"); document.write(a); </script> </body> </html>
Producción:
7
When eval() not evil: Para los casos en los que está ejecutando el programa en su navegador. Además, debe tener mucho cuidado de no pasar ninguna información que pueda dar lugar a la inyección de código y manipular el programa de cualquier manera posible. Generalmente se prefiere usar una función alternativa en lugar de eval() si hay alguna función que pueda dar el mismo resultado que eval() . Los cierres, las técnicas orientadas a objetos, las técnicas funcionales generalmente son capaces de reemplazar a eval(). Para los casos en los que esto no se puede hacer y usar eval() es la única forma posible, se prefiere el código de acceso que no manipulará el DOMde ninguna manera. eval() es malo si se ejecuta en el servidor utilizando la entrada enviada por un cliente que no fue creado por el desarrollador o que no fue desinfectado por el desarrollador. eval() no es malo si se ejecuta en el cliente, incluso si usa una entrada no desinfectada creada por el cliente. Obviamente, siempre debe desinfectar la entrada, para tener cierto control sobre lo que consume su código.
Publicación traducida automáticamente
Artículo escrito por vanshikagoyal43 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA