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


CA2142: прозрачный код не должен быть защищен с помощью требований LinkDemand

TypeName

TransparentMethodsShouldNotBeProtectedWithLinkDemands

CheckId

CA2142

Категория

Microsoft.Security

Критическое изменение

Критическое изменение

Причина

Прозрачному методу необходимо требование LinkDemand или другое требование безопасности.

Описание правила

Это правило срабатывает для прозрачных методов, для доступа к которым требуется LinkDemand. Прозрачный для системы безопасности код не должен отвечать за проверку безопасности операции и поэтому не должен требовать разрешений. Поскольку предполагается, что прозрачные методы являются нейтральными в плане безопасности, они не должны принимать какие-либо решения по безопасности. Кроме того, критичный в плане безопасности код, который принимает решения по безопасности, не должен полагаться на прозрачный код, который ранее принимал такое решение.

Устранение нарушений

Чтобы исправить нарушение этого правила, удалите требование компоновки прозрачного метода или отметьте метод атрибутом SecuritySafeCriticalAttribute, если он выполняет проверки безопасности, такие как проверка требований безопасности.

Отключение предупреждений

Для этого правила отключать вывод предупреждений не следует.

Пример

В следующем примере это правило срабатывает в методе, поскольку метод является прозрачным и помечается LinkDemand PermissionSet, который содержит LinkDemand.

using System;
using System.Security.Permissions;

namespace TransparencyWarningsDemo
{

    public class TransparentMethodsProtectedWithLinkDemandsClass
    {
        // CA2142 violation - transparent code using a LinkDemand.  This can be fixed by removing the LinkDemand
        // from the method.
        [PermissionSet(SecurityAction.LinkDemand, Unrestricted = true)]
        public void TransparentMethod()
        {
        }
    }
}

Для этого правила отключать вывод предупреждений не следует.