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


CA2144: прозрачный код не должен загружать сборки из массивов байтов

Товар Значение
Идентификатор правила 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);
        }
    }
}