c# .net security cas security-zone

c# - Obtener la zona de seguridad actual/activa de una aplicación.NET?



security cas (3)

Necesita ver la evidencia de CAS para el ensamblado actual;

this.GetType (). Assembly.Evidence

Assembly.Evidence es un objeto Evidence de propiedad. A partir de esto, puede enumerar la evidencia y buscar la zona que aparece como un elemento <System.Security.Policy.Zone>.

Tengo una aplicación que se comporta de manera extraña, y solo para verificar, me gustaría ver en qué zona de seguridad se está ejecutando actualmente.

Encontré la enumeración de System.Security.SecurityZone, pero parece que no puedo encontrar nada que me indique con cuál de estos me estoy ejecutando.

¿Alguien tiene algún consejo?

Básicamente, quiero saber si mi aplicación se está ejecutando en MyComputer, Intranet, Internet, no confiable, de confianza, etc.

Editar: Aquí está la aplicación de prueba menor que escribí para encontrar este código, gracias a @blowdart .

using System; using System.Reflection; namespace zone_check { class Program { static void Main(string[] args) { Console.WriteLine(".NET version: " + Environment.Version); foreach (Object ev in Assembly.GetExecutingAssembly().Evidence) { if (ev is System.Security.Policy.Zone) { System.Security.Policy.Zone zone = (System.Security.Policy.Zone)ev; Console.WriteLine("Security zone: " + zone.SecurityZone); break; } } } } }


También puedes usar

Evidence e = Thread.CurrentThread.GetType().Assembly.Evidence;

en lugar de

this.GetType().Assembly.Evidence


En .NET 3.5 puedes simplificar el código con LINQ:

Zone z = a.Evidence.OfType<Zone>().First();

Desde .NET 4.0 tiene un método conveniente GetHostEvidence :

Zone z = Assembly.GetExecutingAssembly().Evidence.GetHostEvidence<Zone>();

Tenga en cuenta que las clases de evidencia de .NET 4.0 derivan de la clase base EvidenceBase .

HTH, György