Pregunta

Quiero probar el comportamiento de una determinada pieza de código .NET en entornos de confianza parcial.¿Cuál es la forma más rápida de configurar esto?Siéntase libre de asumir que yo (y otros lectores) somos unos novatos totales de CAS.

@Mella:Gracias por la respuesta.Desgraciadamente, la herramienta en cuestión es explícitamente para código no administrado.No dije "administrado" en mi pregunta y no debería haber supuesto que la gente lo inferiría de la etiqueta ".NET".

¿Fue útil?

Solución

Esta es una excelente pregunta, especialmente desde el punto de vista de TDD y la validación de código en diferentes escenarios de confianza.

Creo que la forma en que abordaría esto sería algo así como:

  • Cree un AppDomain en mi código TDD usando la sobrecarga AppDomain.CreateDomain() que le permite pasar un PermissionSet.El PermissionSet se construiría para que coincida con los diferentes escenarios de confianza con los que desea realizar la prueba.

  • Cargue el ensamblado que contiene la lógica bajo prueba en el dominio de la aplicación

  • Cree instancias de tipos/métodos de llamada, etc. en el dominio de la aplicación, capture excepciones de seguridad

Algo así como eso.Todavía no he tenido tiempo de realizar una prueba de concepto.

Otros consejos

La funcionalidad que busca está integrada en Visual Studio:

En la pestaña de seguridad de su proyecto, hay un botón "Avanzado ..." que le permite configurar si desea depurar con total confianza o en un nivel de confianza específico.

Utilizar el Verificador de aplicaciones de Microsoft.

AppVerifier ayuda a determinar:

  • Cuando la aplicación utiliza las API correctamente:(API TerminateThread inseguras, uso correcto de las API de almacenamiento local de subprocesos (TLS), o uso correcto de manipulaciones del espacio virtual (por ejemplo, VirtualAlloc, MapViewOfFile).
  • Si la aplicación oculta violaciones de acceso mediante el manejo estructurado de excepciones.
  • Si la aplicación intenta utilizar identificadores no válidos.
  • Si hay daños en la memoria o problemas en el montón.
  • Si la aplicación se queda sin memoria con pocos recursos.
  • Si se está utilizando el uso correcto de las secciones críticas.
  • Si una aplicación que se ejecuta en un entorno administrativo funcionará bien en un entorno con menos privilegios.
  • Si existen problemas potenciales cuando la aplicación se ejecuta como usuario limitado.
  • Si hay variables no inicializadas en futuras llamadas a funciones en el contexto de un hilo.

Deberías mirar la herramienta de configuración de .NET Framework.Está en el SDK de .NET y puede encontrar instrucciones sobre cómo ejecutarlo aquí...http://msdn.microsoft.com/en-us/library/2bc0cxhc.aspx

En el Política de seguridad en tiempo de ejecución En esta sección encontrarás 3 niveles de póliza:Empresa, Máquina y Usuario.Si profundiza en Máquina o Usuario, encontrará definiciones de Grupos de códigos y Conjuntos de permisos .Cuando dice que desea probar algún código .NET en entornos de confianza parcial, supongo que querrá probar con uno de los conjuntos de permisos estándar ya definidos, como Internet .Es necesario definir un Grupo de códigos que coincida con su aplicación (o ensamblajes específicos) y asigne el conjunto de permisos elegido a esa Grupo de códigos .

Puedes definir tu propia costumbre. Conjuntos de permisos también, pero mantengámoslo simple por ahora.

Elija si desea que su nuevo grupo de códigos exista en toda la máquina o solo para su cuenta de usuario, y profundice en el nivel de política de Máquina o Usuario en consecuencia.Verás un grupo de códigos llamado _Todos los códigos_.Cree un grupo de códigos secundarios dentro de ese, haciendo clic derecho y seleccionando Nuevo...

Dale un nombre, di Grupo de confianza parcial , luego haga clic Próximo .

Debe especificar una condición de membresía para este grupo y hay varios tipos.Me gusta crear una carpeta específica llamada Confianza parcial en mi máquina y luego crear una condición de membresía de URL que coincida.Entonces, mi URL se ve así...archivo://c:/users/martin/documents/partialtrust/*

El * es un comodín para detectar cualquier ensamblaje debajo de esa ruta.Hacer clic Próximo .

Ahora puede elegir un conjunto de permisos para su nuevo grupo de códigos.Por ahora, elige Internet .Es un conjunto bastante restrictivo, similar a un entorno limitado de subprogramas de Java.Hacer clic Próximo y Finalizar .

Ahora haga clic derecho en su nuevo grupo de códigos y seleccione Propiedades.En la pestaña General, asegúrese de que la casilla de verificación superior esté seleccionada y luego haga clic en Aceptar.

Ahora, cualquier ensamblado .NET que se cargue desde una ubicación debajo de la URL que especificó tendrá la Internet conjunto de permisos que se les aplica.Espere obtener algunas SecurityExceptions si no ha escrito su código para observar cuidadosamente el conjunto de permisos reducido.

Lo siento, esta es una descripción larga.Realmente es mucho más simple de lo que parece.

Acabo de publicar un artículo titulado Pruebas de confianza parciales con xUnit.net en mi blog.Detalla el marco basado en xUnit.net que utilizamos en el equipo de Entity Framework para ejecutar código con confianza media.

A continuación se muestra un ejemplo de su uso.

public class SomeTests : MarshalByRefObject
{
    [PartialTrustFact]
    public void Partial_trust_test1()
    {
        // Runs in medium trust
    }
}

// Or...

[PartialTrustFixture]
public class MoreTests : MarshalByRefObject
{
    [Fact]
    public void Another_partial_trust_test()
    {
        // Runs in medium trust
    }
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top