.NET 애플리케이션의 현재/활성 보안 영역을 얻습니까?
-
04-07-2019 - |
문제
이상하게 행동하는 응용 프로그램이 있으며, 확인하기 위해 현재 어떤 보안 영역을 실행하고 있는지 확인하고 싶습니다.
System.security.securityzone enum을 찾았지만이 중 어느 쪽을 실행하고 있는지 찾을 수없는 것 같습니다.
팁이 있습니까?
기본적으로 내 응용 프로그램이 MyComputer, Intranet, 인터넷, 신뢰할 수없는, 신뢰할 수없는 등에서 실행 중인지 알고 싶습니다.
편집하다: 이 코드를 찾기 위해 쓴 작은 테스트 앱은 다음과 같습니다. @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;
}
}
}
}
}
해결책
현재 어셈블리에 대한 CAS 증거를 살펴 봐야합니다.
this.getType (). 어셈블리
조립. 증거 재산입니다 증거 물체. 이것으로부터 당신은 할 수 있습니다 증거를 열거하십시오 그리고 a로 나타나는 영역을 찾으십시오u003CSystem.Security.Policy.Zone> 요소.
다른 팁
.NET 3.5에서는 LINQ로 코드를 단순화 할 수 있습니다.
Zone z = a.Evidence.OfType<Zone>().First();
.NET 4.0에서 편리합니다 GetHostEvidence
방법:
Zone z = Assembly.GetExecutingAssembly().Evidence.GetHostEvidence<Zone>();
.NET 4.0 증거 클래스에서 EvidenceBase
기본 클래스.
HTH, György
당신은 또한 사용할 수 있습니다
Evidence e = Thread.CurrentThread.GetType().Assembly.Evidence;
대신에
this.GetType().Assembly.Evidence
제휴하지 않습니다 StackOverflow