보안 투명 어셈블리에는 보안 중요 코드가 포함될 수 없습니다.
업데이트: 2007년 11월
TypeName |
SecurityTransparentAssembliesShouldNotContainSecurityCriticalCode |
CheckId |
CA2127 |
범주 |
Microsoft.Security |
변경 수준 |
주요 변경 |
원인
100% 투명 어셈블리에서는 중요 코드가 나타날 수 없습니다.
규칙 설명
이 규칙은 형식, 필드 및 메서드 수준에서 SecurityCritical 주석에 대한 100% 투명 어셈블리를 분석합니다. 이 규칙은 100% 투명 어셈블리에 있는 코드에 플래그를 지정하므로 유용합니다. 100% 투명 어셈블리에 있는 코드는 런타임에 보안 예외나 예기치 않은 동작을 트리거합니다.
.NET Framework 2.0에서는 투명성이라는 기능이 추가되었습니다. 개별 메서드, 필드, 인터페이스, 클래스 및 형식은 투명하거나 중요할 수 있습니다.
투명 코드에서 보안 권한을 상승시킬 수는 없습니다. 그러므로 부여되거나 요청된 권한이 코드를 통해 자동으로 호출자 또는 AppDomain에 전달됩니다. '상승'의 예로는 Asserts, LinkDemands, SuppressUnmanagedCode 및 '안전하지 않은' 코드가 있습니다.
어셈블리는 100% 투명, 100% 중요, 투명/중요 혼합 중 하나일 수 있습니다.
어셈블리를 100% 투명으로 표시하려면 어셈블리 수준 특성을 다음과 같이 추가합니다.
[assembly:System.Security.SecurityTransparent]
어셈블리를 100% 중요로 표시하려면 어셈블리 수준 특성을 다음과 같이 추가합니다.
[assembly:System.Security.SecurityCritical(System.Security.SecurityCriticalScope.Everything)]
어셈블리를 투명/중요 혼합으로 표시하려면 어셈블리 수준 특성을 다음과 같이 추가합니다.
[assembly:System.Security.SecurityCritical]
투명 코드는 100% 중요 어셈블리에 나타날 수 없으며, 중요 코드는 100% 투명 어셈블리에 나타날 수 없습니다.
위반 문제를 해결하는 방법
이 문제를 해결하려면 어셈블리를 투명/중요 혼합으로 표시하거나 플래그가 지정된 코드에서 SecurityCritical 특성을 제거합니다.
경고를 표시하지 않는 경우
이 규칙에서는 메시지를 표시해야 합니다.