Partilhar via


CA2141:Transparent métodos não devem atender a LinkDemands

TypeName

TransparentMethodsMustNotSatisfyLinkDemands

CheckId

CA2141

Categoria

Microsoft.Security

Alteração Significativa

Quebra

Causa

Um método transparente de segurança chama um método em um assembly que não é marcado com o atributo de AllowPartiallyTrustedCallersAttribute (APTCA), ou um método transparente de segurança satisfaz SecurityAction.LinkDemand para um tipo ou um método.

Descrição da Regra

Atender a um LinkDemand é uma operação confidencial de segurança que pode causar a elevação não intencional de privilégios.O código transparente de segurança não deve atender a LinkDemands, porque não está sujeito aos mesmos requisitos de auditoria de segurança que o código crítico de segurança.Os métodos transparentes em assemblies definidos de nível 1 da regra de segurança causarão qualquer LinkDemands que satisfazem para ser convertidos em tempo de execução para as demandas completas, que podem causar problemas de desempenho.Em assemblies definidos de nível 2 da regra de segurança, os métodos transparentes não serão mais no compilador de (JIT) just-in-time se tentarem atender a um LinkDemand.

Em assemblies que a segurança de nível 2 do usee, o tentará por um método transparente de segurança de atender a um LinkDemand ou de chamar um método em um assembly de non-APTCA aumenta MethodAccessException; nos assemblies de nível 1 é o LinkDemand se torna uma procura completa.

Como Corrigir Violações

Para corrigir uma violação desta regra, marque o método acessando com o atributo de SecurityCriticalAttribute ou de SecuritySafeCriticalAttribute , ou remover o LinkDemand do método acessado.

Quando Suprimir Alertas

Não elimine um alerta desta regra.

Exemplo

Neste exemplo, um método transparente tentar chamar um método que tem um LinkDemand.Esta regra será acionado neste 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();
        }
    }
}