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);
        }
    }
}