Поделиться через


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