CA2137: 투명한 메서드는 안정형 IL만 포함해야 합니다.
TypeName |
TransparentMethodsMustBeVerifiable |
CheckId |
CA2137 |
범주 |
Microsoft.Security |
변경 수준 |
주요 변경 |
원인
메서드가 확인할 수 없는 코드를 포함하거나 형식을 참조로 반환합니다.
규칙 설명
이 규칙은 보안 투명 코드에서 확인할 수 없는 MSIL(Microsoft Intermediate Language)을 실행하려고 할 때 적용됩니다. 그러나 이 규칙은 완전한 IL 검증 도구를 포함하지 않으며 대신 휴리스틱을 사용하여 MSIL 확인 시 대부분의 위반을 catch합니다.
코드에 확인 가능한 MSIL만 포함되는지 확인하려면 어셈블리에서 Peverify.exe(PEVerify 도구)를 실행합니다. 오류를 발생시키는 확인 가능한 투명 메서드로만 출력을 제한하는 /transparent 옵션을 사용하여 PEVerify를 실행합니다. /transparent 옵션을 사용하지 않는 경우 PEVerify는 확인할 수 없는 코드를 포함하도록 허용되는 중요 메서드도 확인합니다.
위반 문제를 해결하는 방법
이 규칙의 위반 문제를 해결하려면 SecurityCriticalAttribute 또는 SecuritySafeCriticalAttribute 특성으로 메서드를 표시하거나 확인할 수 없는 코드를 제거하십시오.
경고를 표시하지 않는 경우
이 규칙에서는 경고를 표시해야 합니다.
예제
이 예제의 메서드는 확인할 수 없는 코드를 사용하며 SecurityCriticalAttribute 또는 SecuritySafeCriticalAttribute 특성으로 표시되어야 합니다.
using System;
using System.Security;
namespace TransparencyWarningsDemo
{
public class UnverifiableMethodClass
{
// CA2137 violation - transparent method with unverifiable code. This method should become critical or
// safe critical
// public unsafe byte[] UnverifiableMethod(int length)
// {
// byte[] bytes = new byte[length];
// fixed (byte* pb = bytes)
// {
// *pb = (byte)length;
// }
// return bytes;
// }
}
}