2011-09-05 23 views
19

Estoy tratando de agregar complementos en mi aplicación, pero no quiero que el complemento use la reflexión en absoluto, el código de complemento puede ser un entorno limitado usando Application Domain.Cómo denegar la reflexión usando ReflectionPermission

He encontrado un Dominio de aplicación example en MSDN, pero no tiene ninguna referencia para ReflectionPermision, y también se devaluó el atributo de seguridad Denegar, se deprecian muchos atributos, ¿cómo dejo de reflexionar?

Respuesta

8

Para usar AppDomain.CreateDomain para crear un dominio de aplicación de espacio aislado, debe pasar un conjunto de permisos que contenga solo los permisos que desea otorgar a los ensamblados de espacio aislado. Si no desea otorgar ReflectionPermission, simplemente no debe agregarlo al conjunto de permisos.

Dicho esto, ReflectionPermission está lejos de ser el único permiso "peligroso" que normalmente debería denegarse a los complementos de fuente general. Si quiere ser muy estricto, puede considerar otorgar solo SecurityPermission \ Execution. p.:

PermissionSet permissionSet = new PermissionSet(PermissionState.None); 
permissionSet.AddPermission(new SecurityPermission(SecurityPermissionFlag.Execution)); 

Si desea incluir permisos adicionales "seguros", sólo tiene que añadir al conjunto de permisos usando las llamadas AddPermission adicionales. Si desea incluir todos los permisos que se consideraron lo suficientemente seguros como para otorgarlos al código de origen de Internet en un sistema de políticas de CAS desfasado, puede extraerlos pasando la evidencia de la zona de Internet al método estático de SecurityManager.GetStandardSandbox. p.:

Evidence evidence = new Evidence(); 
evidence.AddHostEvidence(new Zone(SecurityZone.Internet)); 

PermissionSet permissionSet = SecurityManager.GetStandardSandbox(evidence); 

N. B.: Ambos enfoques se describen en el MSDN article al que usted hizo referencia en su pregunta.

0

De acuerdo con la documentación, ReflectionPermission es algo que usted otorga para otorgar acceso de código a miembros privados y protegidos. Por defecto, no se concede y el código solo tiene acceso a miembros públicos. Si intenta ocultar a los miembros públicos, deberá crear una nueva interfaz que no los exponga.

+0

No olvide que el código malicioso * puede * acceder a miembros protegidos, al heredar de la clase. Sin embargo, no puede acceder a miembros protegidos de objetos existentes. – svick

+4

Use la palabra clave 'sellada' para evitar que una clase sea heredada. – DevDelivery

Cuestiones relacionadas