Seguridad y generación de código inmediata
Actualización: noviembre 2007
Algunas bibliotecas funcionan mediante la generación de código que luego ejecutan para realizar algunas operaciones para el llamador. El problema fundamental es generar código en nombre de un código de nivel de confianza inferior y ejecutarlo en un nivel de confianza más alto. El problema empeora cuando el llamador puede influir en la generación de código, por tanto, debe asegurarse de que sólo se genera código que considere seguro.
Es necesario conocer exactamente el tipo de código que se genera en todo momento. Esto significa tener controles estrictos en todos los valores recibidos de un usuario, ya sean cadenas entre comillas (que se deben omitir para que no puedan incluir elementos imprevistos de código), identificadores (que se deben comprobar para verificar que son válidos) o cualquier otro tipo de valor. Los identificadores pueden ser peligrosos porque puede modificarse un ensamblado compilado con el fin de que sus identificadores contengan caracteres extraños, que probablemente lo interrumpirán (aunque casi nunca generan puntos vulnerables en la seguridad).
Es conveniente generar código con reflection emit, que con frecuencia sirve para evitar muchos de estos problemas.
Cuando compile el código, compruebe si hay alguna posibilidad de que lo modifique un programa malicioso. ¿Hay algún breve período de tiempo durante el cual el código malicioso puede cambiar el código fuente del disco antes de que el compilador lo lea o antes de que el código cargue el archivo .dll? Si es así, debe proteger el directorio que contiene estos archivos mediante la seguridad de acceso a código o con una lista de control de acceso (ACL) en el sistema de archivos, según sea necesario.
Si un llamador puede influir en el código generado de forma que pueda provocar un error del compilador, es posible que allí también exista un punto vulnerable en la seguridad.
Ejecute el código generado en el nivel de configuración de permisos más bajo posible, mediante PermitOnly o Deny.