CA2144:透明代码不应从字节数组加载程序集

类型名

TransparentMethodsShouldNotLoadAssembliesFromByteArrays

CheckId

CA2144

类别

Microsoft.Security

是否重大更改

原因

透明方法使用下列方法之一从字节数组加载程序集:

规则说明

透明代码安全检查不像关键代码的安全检查一样全面,因为透明代码不能执行安全敏感的操作。 从字节数组中加载的程序集在不透明的代码中可能不会被注意到,并且该字节数组可能包含确实需要审核的关键或更重要的安全关键代码。 因此,透明代码不应从字节数组加载程序集。

如何解决冲突

要解决此规则的冲突,使用 SecurityCriticalAttributeSecuritySafeCriticalAttribute 特性标记加载程序集的方法。

何时禁止显示警告

不要禁止显示此规则发出的警告。

示例

规则在以下代码上触发是因为透明方法从字节数组加载程序集。

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