Compartilhar via


CA2126: As demandas de link do tipo exigem demandas de herança

TypeName

TypeLinkDemandsRequireInheritanceDemands

CheckId

CA2126

Category (Categoria)

Microsoft.Security

Alteração Significativa

Interrompendo

Causa

Um tipo público não selado é protegido com uma demanda de link, tem um método substituível, e nem o tipo ou o método são protegidos com uma demanda de herança.

Descrição da Regra

Uma demanda de link em um método ou no seu tipo declarando requer que o chamador imediato do método tenha a permissão especificada.Uma demanda de herança em um método requer que um método principal tenha a permissão especificada.Uma demanda de herança em um tipo requer que uma classe derivada tenha a permissão especificada.

Como Corrigir Violações

Para corrigir uma violação desta regra, proteja o tipo ou o método com uma demanda de herança para a mesma permissão que a demanda de link.

Quando Suprimir Alertas

Não elimine um alerta desta regra.

Exemplo

O exemplo a seguir mostra um tipo que viola a regra.

Imports System
Imports System.Security.Permissions

Namespace SecurityLibrary

    <EnvironmentPermission(SecurityAction.LinkDemand, Read:="PATH")> _
    Public Class TypesWithLinkDemands

        Protected Overridable Sub UnsecuredMethod()
        End Sub

        <EnvironmentPermission(SecurityAction.InheritanceDemand, Read:="PATH")> _
        Protected Overridable Sub SecuredMethod()
        End Sub

    End Class

End Namespace
using System;
using System.Security.Permissions;

namespace SecurityLibrary
{
   [EnvironmentPermission(SecurityAction.LinkDemand, Read = "PATH")]
   public class TypesWithLinkDemands
   {
      public virtual void UnsecuredMethod() {}

      [EnvironmentPermission(SecurityAction.InheritanceDemand, Read = "PATH")]
      public virtual void SecuredMethod() { }
   }
}
using namespace System;
using namespace System::Security::Permissions;

namespace SecurityLibrary
{
    [EnvironmentPermission(SecurityAction::LinkDemand, Read = "PATH")]
    public ref class TypesWithLinkDemands
    {
    protected:
        virtual void UnsecuredMethod() {}

        [EnvironmentPermission(SecurityAction::InheritanceDemand, 
           Read = "PATH")]
        virtual void SecuredMethod() {}
    };
}

Regras Relacionadas

CA2108: Analisar segurança declarativa em tipos de valor

CA2112: Tipos de seguros não devem expor campos

CA2122: Não expõem indiretamente métodos com as demandas de link

CA2123: As demandas de link de substituição devem ser idênticas à base

Consulte também

Conceitos

Demandas de herança

Demandas de link

Demandas

Outros recursos

Diretrizes para codificação segura