La mayoría de los lenguajes modernos (que se interpretan de alguna manera) tienen algún tipo de función eval . Dicha función ejecuta un código de idioma arbitrario, la mayoría de las veces se pasa como el argumento principal como una cadena (diferentes idiomas pueden agregar más funciones a la función eval).
Entiendo que no se debe permitir que los usuarios ejecuten esta función ( editar , es decir, que se ingrese directa o indirectamente una entrada arbitraria de un usuario arbitrario a eval
), especialmente con el software del lado del servidor. Ya que podrían forzar el proceso para ejecutar código malicioso. De esa manera, los tutoriales y las comunidades nos dicen que no usemos eval. Sin embargo, hay muchas veces en las que eval es útil y se usa:
- Reglas de acceso personalizadas a elementos de software (IIRC OpenERP tiene un objeto
ir.rule
que puede usar código dinámico de Python). - Cálculos y / o criterios personalizados (OpenERP tiene campos como ese para permitir cálculos de códigos personalizados).
- Analizadores de informes de OpenERP (sí, sé que te estoy volviendo loco con las cosas de OpenERP ... pero es el principal ejemplo que tengo).
- Codificación de los efectos de hechizos en algunos juegos de rol.
Por lo tanto, tienen un buen uso, siempre y cuando se utilicen correctamente. La principal ventaja es que la función permite a los administradores escribir código personalizado sin tener que crear más archivos e incluirlos (aunque la mayoría de los marcos que usan funciones eval tienen también una forma de especificar un archivo, módulo, paquete, ... para leer).
Sin embargo, eval es malvado en la cultura popular. Se me ocurren cosas como entrar en tu sistema.
Sin embargo, hay otras funciones que podrían ser perjudiciales si los usuarios accedieran de alguna manera: desvincular, leer, escribir (semántica de archivos), asignación de memoria y aritmética de punteros, acceso a modelos de base de datos (incluso si no se consideran los casos inyectables de SQL). / p>
Básicamente, la mayoría del tiempo cuando cualquier código no se escribe correctamente o no se ve correctamente (recursos, usuarios, entornos, ...), el código es malo y puede llevar incluso a un impacto económico.
Pero hay algo especial con las funciones eval
(independientemente del idioma).
Pregunta : ¿Existe algún hecho histórico para que este temor se convierta en parte de la cultura popular, en lugar de prestar la misma atención a las otras características posiblemente peligrosas?