Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En este tema se describen problemas de seguridad que es necesario conocer y que se producen al crear ensamblados dinámicos mediante Reflection Emit. Algunos escenarios requieren permisos específicos. Otros escenarios requieren que se establezcan permisos para el código generado. En la siguiente explicación, el término "llamador" hace referencia al creador de los ensamblados dinámicos o módulos dinámicos.
Escenarios que requieren permisos específicos
El motor de tiempo de ejecución requiere que el ensamblado creador tenga el permiso ReflectionPermissionFlag.ReflectionEmit para invocar determinadas operaciones en objetos AssemblyBuilder y objetos ModuleBuilder. Debido a que Reflection Emit utiliza Reflection, es posible que el ensamblado creador también necesite permiso para usar Reflection.
Establecer permisos para el código generado
- Un llamador necesita los permisos de archivo correctos para conservar un ensamblado dinámico.
- Los llamadores que tengan el permiso SecurityPermissionFlag.ControlEvidence pueden proporcionar evidencia para el código generado. Esta evidencia se asigna a través de directivas para determinar los permisos concedidos.
- Cualquier llamador puede proporcionar una evidencia nula, en cuyo caso el ensamblado obtiene el conjunto de permisos del llamador. De este modo se garantiza que el código generado no tiene más permisos que su llamador.
- Después de que un ensamblado dinámico se guarda en el disco, en las operaciones de carga posteriores se obtienen concesiones que se basan en las directivas asociadas a la ubicación en la que se guardó el ensamblado. En otras palabras, el ensamblado se trata como cualquier otro ensamblado que se cargue desde el disco.
- El código generado por llamadores en los que se confía parcialmente siempre se comprueba. Concretamente, el motor de tiempo de ejecución comprueba siempre el código que no tiene el permiso SecurityPermissionFlag.SkipVerification. Los llamadores en los que se confía plenamente pueden saltarse la comprobación o requerir que se compruebe el código generado.