CA2141:Transparent métodos não devem atender a LinkDemands
Item | Valor |
---|---|
RuleId | CA2141 |
Categoria | Microsoft.Security |
Alteração da falha | Quebra |
Causa
Um método transparente de segurança chama um método em um assembly que não foi marcado com o atributo AllowPartiallyTrustedCallersAttribute (APTCA), ou um método transparente de segurança atende a um SecurityAction.LinkDemand
para um tipo ou um método.
Observação
Esta regra foi preterida. Para obter mais informações, confira Regras preteridas.
Descrição da regra
Atender a um LinkDemand é uma operação confidencial para a segurança que pode causar elevação de privilégio não intencional. O código transparente de segurança não deve atender ao LinkDemands, pois não está sujeito aos mesmos requisitos de auditoria de segurança que o código crítico de segurança. Métodos transparentes em assemblies de nível 1 do conjunto de regras de segurança farão com que todos os LinkDemands que atendem sejam convertidos em demandas completas em tempo de execução, o que pode causar problemas de desempenho. Em assemblies de nível 2 do conjunto de regras de segurança, os métodos transparentes não serão compilados no compilador Just-In-Time (JIT) se tentarem atender a um LinkDemand.
Em assemblies que usam a segurança de Nível 2, as tentativas de um método transparente de segurança para atender a um LinkDemand ou chamar um método em um assembly não APTCA gera um MethodAccessException; em assemblies de Nível 1, o LinkDemand se torna uma demanda completa.
Como corrigir violações
Para corrigir uma violação dessa regra, marque o método de acesso com o atributo SecurityCriticalAttribute ou SecuritySafeCriticalAttribute ou remova o LinkDemand do mecanismo acessado.
Quando suprimir avisos
Não suprima um aviso nessa regra.
Exemplo
Nesse exemplo, um método transparente tenta chamar um método que tem um LinkDemand. Essa regra será acionada nesse código.
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();
}
}
}
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de