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