다음을 통해 공유


코드 액세스 보안 정책 호환성 및 마이그레이션

.NET Framework 버전 4에서는 CAS(코드 액세스 보안)의 정책 부분이 사용되지 않습니다. 따라서 사용되지 않는 정책 형식 및 멤버를 명시적으로 호출하거나 다른 형식 및 멤버를 통해 암시적으로 호출하면 컴파일 경고 및 런타임 예외가 발생할 수 있습니다.

이러한 경고와 오류는 다음과 같이 방지할 수 있습니다.

이 항목에는 다음과 같은 단원이 포함되어 있습니다.

  • 명시적 사용

  • 암시적 사용

  • 오류 및 경고

  • 마이그레이션: 사용되지 않는 호출에 대한 대체 호출

  • 호환성: CAS 정책 레거시 옵션 사용

명시적 사용

보안 정책을 직접 조작하거나 CAS 정책을 샌드박싱해야 하는 멤버는 사용되지 않으며 기본적으로 오류를 생성합니다.

이러한 멤버의 예는 다음과 같습니다.

암시적 사용

몇 가지 어셈블리 로드 오버로드에서는 CAS 정책의 암시적 사용으로 인해 오류를 생성합니다. 이러한 오버로드는 Evidence 매개 변수를 사용하여 CAS 정책을 확인하고 어셈블리에 권한 부여 설정을 제공합니다.

예를 들면 다음과 같습니다. Evidence를 매개 변수로 사용하는 오버로드는 이제 사용되지 않습니다.

오류 및 경고

사용되지 않는 형식과 멤버를 사용하면 다음과 같은 오류 메시지가 생성됩니다. System.Security.Policy.Evidence 형식 자체가 사용되지 않는 것은 아닙니다.

컴파일 타임 경고:

warning CS0618: '<API Name>' is obsolete: 'This method is obsolete and will be removed in a future release of the .NET Framework. Please use <suggested alternate API>. See <link> for more information.'

런타임 예외:

NotSupportedException: This method uses CAS policy, which has been obsoleted by the .NET Framework. In order to enable CAS policy for compatibility reasons, please use the <NetFx40_LegacySecurityPolicy> configuration switch. Please see <link> for more information.

마이그레이션: 사용되지 않는 호출에 대한 대체 호출

어셈블리의 신뢰 수준 확인

CAS 정책은 주로 어셈블리나 응용 프로그램 도메인의 권한 부여 설정 또는 신뢰 수준을 확인하는 데 사용됩니다. .NET Framework 4에서는 보안 정책을 확인할 필요가 없는 다음과 같은 유용한 속성을 제공합니다.

응용 프로그램 도메인 샌드박싱

응용 프로그램 도메인의 어셈블리를 샌드박싱하는 데는 일반적으로 AppDomain.SetAppDomainPolicy 메서드가 사용됩니다. .NET Framework 4에서는 이를 위해 PolicyLevel을 사용할 필요가 없는 멤버를 노출합니다. 자세한 내용은 방법: 샌드박스에서 부분 신뢰 코드 실행을 참조하십시오.

부분적으로 신뢰할 수 있는 코드에 대한 안전하거나 적절한 권한 집합 결정

호스트는 대개 호스팅되는 코드를 샌드박싱하는 데 적절한 권한을 결정해야 합니다. .NET Framework 4 이전에는 SecurityManager.ResolvePolicy 메서드와 함께 CAS 정책을 사용하여 이 작업을 수행할 수 있었습니다. .NET Framework 4에서는 제공된 증명 정보에 대해 안전한 표준 권한 집합을 반환하는 SecurityManager.GetStandardSandbox 메서드를 제공함으로써 이전의 기능을 대체합니다.

샌드박싱을 수행하지 않는 시나리오: 어셈블리 로드용 오버로드

어셈블리 로드 오버로드를 사용하는 이유는 어셈블리를 샌드박싱하는 대신 이 용도로만 제공되는 매개 변수를 사용하기 위해서입니다. .NET Framework 4부터는 System.Security.Policy.Evidence 개체를 매개 변수로 사용할 필요가 없는 어셈블리 로드 오버로드(예: AppDomain.ExecuteAssembly(String, String[], Byte[], AssemblyHashAlgorithm))를 통해 이 시나리오를 사용할 수 있습니다.

어셈블리를 샌드박싱하려면 AppDomain.CreateDomain(String, Evidence, AppDomainSetup, PermissionSet, StrongName[]) 오버로드를 사용합니다.

호환성: CAS 정책 레거시 옵션 사용

<NetFx40_LegacySecurityPolicy> 구성 요소를 사용하면 프로세스나 라이브러리에서 레거시 CAS 정책을 사용하도록 지정할 수 있습니다. 이 요소를 사용하면 정책 및 증명 정보 오버로드가 이전 버전의 프레임워크에서처럼 작동합니다.

참고참고

CAS 정책 동작은 런타임 버전별로 지정되므로 한 런타임 버전에 대해 CAS 정책을 수정해도 다른 버전의 CAS 정책에는 영향을 주지 않습니다.

<configuration>
   <runtime>
      <NetFx40_LegacySecurityPolicy enabled="true"/>
   </runtime>
</configuration>

참고 항목

작업

방법: 샌드박스에서 부분 신뢰 코드 실행