CA2143: прозрачные методы не должны использовать требования безопасности
TypeName |
TransparentMethodsShouldNotDemand |
CheckId |
CA2143 |
Категория |
Microsoft.Security |
Критическое изменение |
Критическое изменение |
Причина
Прозрачный тип или метод декларативно помечается требованием System.Security.Permissions.SecurityAction.Demand, или метод вызывает метод CodeAccessPermission.Demand.
Описание правила
Прозрачный для системы безопасности код не должен отвечать за проверку безопасности операции и поэтому не должен требовать разрешений. Прозрачный для системы безопасности код должен использовать полные требования для принятия решений по безопасности, и критичный в плане безопасности код не должен полагаться на прозрачный код, чтобы создать полное требование. Любой код, который выполняет проверки безопасности, такие как требования безопасности, должен быть критичным в плане безопасности.
Устранение нарушений
В целом, чтобы устранить нарушение данного правила, следует пометить метод атрибутом SecuritySafeCriticalAttribute. Можно также удалить требование.
Отключение предупреждений
Для этого правила отключать вывод предупреждений не следует.
Пример
Это правило срабатывает на следующий код, поскольку прозрачный метод создает требование декларативной безопасности.
using System;
using System.Security;
using System.Security.Permissions;
namespace TransparencyWarningsDemo
{
public class TransparentMethodDemandClass
{
// CA2142 violation - transparent code using a Demand. This can be fixed by making the method safe critical.
[PermissionSet(SecurityAction.Demand, Unrestricted = true)]
public void TransparentMethod()
{
}
}
}
См. также
Ссылки
CA2142: прозрачный код не должен быть защищен с помощью требований LinkDemand