Pregunta

Tengo dos aplicaciones web (sitios precompilados), una es de primera parte y se ejecutará en plena confianza. Otro es un tercero y debe ejecutarse en Parcial Trust (o con permisos específicos).

TrustedAssembly.Web.Pages.MyPage debe ejecutarse en el appdomain predeterminado de confianza completa.UntrustedAssembly.Web.Pages.SomePage Debe ejecutarse en un appdomain de confianza parcial.

Además, si TrustedAssembly.Web.Pages.MyPage Cargas dinámicas UntrustedAssembly.Web.Controls.SomeControl ¿Es posible ejecutar el control en confianza parcial y/o con permisos específicos, mientras que la página se ejecuta bajo plena confianza?

Y viceversa, por ejemplo UntrustedAssembly.Web.Controls.SomePage Cargas dinámicas TrustedAssembly.Web.Controls.MyControl, ¿es posible ejecutar el control en plena confianza mientras la página se ejecuta bajo fideicomiso parcial?

Actualización/FYI: este es .net 4

¿Fue útil?

Solución

Es probable que hacer esto sea un poco complicado. Aquí hay dos posibles líneas de pensamiento:

El primero es ejecutar la aplicación en Medium Trust, pero colocar todo lo que desee ejecutar en plena confianza en el GAC y lo que desea ejecutar en la confianza parcial en Bin.

Tenga en cuenta que en su escenario de 'viceversa', el control de confianza puede necesitar realizar un 'afirmar' de seguridad antes de poder realizar operaciones de confianza completas. p.ej

(new SecurityPermission(SecurityPermissionFlag.UnmanagedCode)).Assert();

La segunda línea de pensamiento es ejecutar la aplicación en plena confianza, pero luego cargar cualquier ensamblaje que desee ejecutar en Medium Trust usando una personalización Evidencia. p.ej

var evidence = new Evidence();
// Initialize the Evidence
Assembly.LoadFrom(path, evidence);

Pero tenga en cuenta que configurar correctamente el objeto de evidencia no es para los débiles de corazón, y no estoy seguro de que vaya a hacer ese camino.

No es una respuesta completa, pero con suerte algunas ideas que puedan conducir a una :)

Otros consejos

+1 a David Ebbo - Ejecutar una aplicación completa bajo confianza parcial y elevar para las llamadas del ensamblaje Gaced es solo un enfoque sano.

Algunos puntos más en los que pensar ...

  • No hay muchas clases diseñadas para ser remotadas entre los appdomains. Los Asp.net no son muy remotibles ...
  • Los controles ASP.NET tienen muchos puntos de integración con el tiempo de ejecución. Deberá construir clases de proxy muy interesantes para restringir adecuadamente las interacciones entre los controles y el tiempo de ejecución para evitar posibles elevaciones y tener el mariscal de dominio correcto.
  • Es fácil "filtrar" las clases de otros ensamblajes a través de los límites del dominio (la carga personalizada desde la ubicación personalizada ayuda a evitar "fugas" al hacer que las fallas sean más obvias). El uso del marco con muchos puntos de etensiones (anulaciones, eventos) como ASP.NET ofrece más posibilidades de traer objetos de dominio cruzado.
  • Esto no lo ayudará a ejecutar código arbitrario en su proceso: declara confianza (sentido no CLR) para personalizar el código simplemente cargando en su proceso. IE StackOverflow se puede lograr por código que solo ha ejecutado permisos y relajará relajando su proceso.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top