Partilhar via


As demandas de link de tipo exigem demandas de herança

TypeName

TypeLinkDemandsRequireInheritanceDemands

CheckId

CA2126

Category (Categoria)

Microsoft.segurança

Quebrando alterar

Quebrando

Causa

Um tipo público sem lacre é protegido com uma demanda de link, tem um método substituível e nem o tipo do método está protegido com uma demanda de herança.

Descrição da regra

Uma demanda de link em seu tipo declarativo ou um método requer que o chamador imediato do método têm a permissão especificada.Uma demanda de herança em um método exige um método de substituição para ter a permissão especificada.Uma demanda de herança em um tipo requer uma classe deriving ter a permissão especificada.

Como corrigir violações

Para corrigir uma violação dessa regra, proteja o tipo ou o método com uma demanda de herança para a mesma permissão sistema autônomo a demanda de link.

Quando suprimir avisos

Não suprimir um aviso da 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

Analisar a segurança declarativa em tipos de valor

Tipos protegidos não devem expor campos

Não exponha indiretamente métodos com demandas de link

As demandas de link de substituir devem ser idênticas a base

Consulte também

Conceitos

Demandas de herança

Demandas de link

Outros recursos

Diretrizes para Codificação Segura

Dados do Access