CA2141: прозрачные методы не должны удовлетворять требования LinkDemand
Товар | Значение |
---|---|
Идентификатор правила | CA2141 |
Категория | Microsoft.Security |
Критическое изменение | Критическое |
Причина
Прозрачный метод безопасности вызывает метод в сборке, которая не помечена AllowPartiallyTrustedCallersAttribute атрибутом APTCA, или прозрачный метод безопасности удовлетворяет SecurityAction.LinkDemand
типу или методу.
Примечание.
Это правило устарело. Дополнительные сведения см. в разделе "Устаревшие правила".
Описание правила
Удовлетворение LinkDemand — это конфиденциальная операция безопасности, которая может вызвать непреднамеренное повышение привилегий. Прозрачный код безопасности не должен соответствовать LinkDemands, так как он не соответствует тем же требованиям аудита безопасности, что и критически важный код безопасности. Прозрачные методы в сборках набора правил безопасности уровня 1 приводят ко всем сборкам LinkDemands, которые они удовлетворяют, преобразуются в полные требования во время выполнения, что может привести к проблемам с производительностью. В сборках набора правил безопасности 2 прозрачные методы не смогут компилироваться в JIT-компиляторе, если они пытаются удовлетворить LinkDemand.
В сборках, использующих безопасность уровня 2, попытки прозрачного метода безопасности для удовлетворения LinkDemand или вызова метода в сборке, отличной от APTCA, вызывают MethodAccessExceptionзначение; в сборках уровня 1 LinkDemand становится полным спросом.
Устранение нарушений
Чтобы устранить нарушение этого правила, пометьте метод доступа с SecurityCriticalAttribute помощью атрибута или SecuritySafeCriticalAttribute удалите LinkDemand из доступного метода.
Когда лучше отключить предупреждения
Для этого правила отключать вывод предупреждений не следует.
Пример
В этом примере прозрачный метод пытается вызвать метод, имеющий LinkDemand. Это правило будет запускаться в этом коде.
using System;
using System.Security.Permissions;
namespace TransparencyWarningsDemo
{
public class TransparentMethodSatisfiesLinkDemandsClass
{
[SecurityPermission(SecurityAction.LinkDemand, UnmanagedCode = true)]
public void LinkDemandMethod() { }
public void TransparentMethod()
{
// CA2141 violation - transparent method calling a method protected with a link demand. Any of the
// following fixes will work here:
// 1. Make TransparentMethod critical
// 2. Make TransparentMethod safe critical
// 3. Remove the LinkDemand from LinkDemandMethod (In this case, that would be recommended anyway
// since it's level 2 -- however you could imagine it in a level 1 assembly)
LinkDemandMethod();
}
}
}
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по