CA2144: 투명 코드는 바이트 배열에서 어셈블리를 로드해서는 안 됩니다.
TypeName |
TransparentMethodsShouldNotLoadAssembliesFromByteArrays |
CheckId |
CA2144 |
범주 |
Microsoft.Security |
변경 수준 |
주요 변경 |
원인
투명 메서드는 다음 메서드 중 하나를 사용하여 바이트 배열에서 어셈블리를 로드합니다.
규칙 설명
투명 코드는 보안에 중요한 동작을 수행할 수 없기 때문에 투명 코드의 보안 검토는 중요 코드에 대한 보안 검토만큼 완벽하지 않습니다. 바이트 배열에서 로드된 어셈블리는 투명 코드에서 발견되지 않을 수 있으며 해당 바이트 배열은 감사할 필요가 없는 중요하거나 특히 안전에 중요한 코드를 포함할 수 있습니다. 따라서 투명 코드는 바이트 배열에서 어셈블리를 로드해서는 안 됩니다.
위반 문제를 해결하는 방법
이 규칙의 위반 문제를 해결하려면 SecurityCriticalAttribute 또는 SecuritySafeCriticalAttribute 특성으로 어셈블리를 로드하는 메서드를 표시하십시오.
경고를 표시하지 않는 경우
이 규칙에서는 경고를 표시해야 합니다.
예제
투명 메서드는 바이트 배열에서 어셈블리를 로드하기 때문에 다음 코드에서 규칙이 실행됩니다.
using System;
using System.IO;
using System.Reflection;
namespace TransparencyWarningsDemo
{
public class TransparentMethodsLoadAssembliesFromByteArraysClass
{
public void TransparentMethod()
{
byte[] assemblyBytes = File.ReadAllBytes("DependentAssembly.dll");
// CA2144 violation - transparent code loading an assembly via byte array. The fix here is to
// either make TransparentMethod critical or safe-critical.
Assembly dependent = Assembly.Load(assemblyBytes);
}
}
}