.NET / Seguridad: La limitación de conjuntos de tiempo de ejecución cargado el acceso a ciertas APIs

StackOverflow https://stackoverflow.com/questions/3807069

Pregunta

En una aplicación de la cáscara, que tiene que ser capaz de cargar y ejecutar otros conjuntos de .NET en tiempo de ejecución, pero sin darles plena confianza. En esencia, quiero limitar ellos (los ensamblados cargados) entre en contacto con los recursos del sistema (threading, redes, etc.), con la única excepción siendo aislado de almacenamiento. Sin embargo, los conjuntos que son del "yo" se deben ejecutar con plena confianza.

He estado considerando Código de Acceso de Seguridad, pero no estoy muy seguro de que es lo que debería utilizar.

¿Cómo hacerlo?

¿Fue útil?

Solución

CAS es más o menos lo que necesita aquí. Más específicamente, se desea cargar el conjunto en su propio dominio de aplicación:

var myEvidence = new Evidence(new object[] {SecurityZone.Internet});
var newDomain = AppDomain.CreateDomain("InternetDomain");
myDomain.Load("MyUntrustedAssembly.dll", myEvidence);
myDomain.CreateInstanceAndUnwrap("MyUntrustedAssembly","MyUntrustedObjectType");

//do your work with the untrusted assembly/type

AppDomain.Unload(myDomain);

Lea sobre dominios de aplicación, las diferentes zonas, y los conjuntos de permisos predeterminados asignados a ellos. Internet es el más restrictivo de los conjuntos de zonas definidas por el sistema / permisos disponibles en el que conjuntos pueden todavía realmente ejecutar (también hay la zona restringida; conjuntos que caen en esta zona no se pueden ejecutar). Puede utilizar la herramienta de configuración de .NET para crear conjuntos de permisos y definir las condiciones (evidencia) que el código debe satisfacer para ser concedido el conjunto de permisos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top