Compartir a través de


Las peticiones de vínculos de tipos requieren peticiones de herencia

Actualización: noviembre 2007

     TypeName

TypeLinkDemandsRequireInheritanceDemands

Identificador de comprobación

CA2126

Category

Microsoft.Security

Cambio problemático

Motivo

Un tipo público no sellado está protegido con una petición de vínculo, tiene un método reemplazable y ni el tipo ni el método están protegidos con una petición de herencia.

Descripción de la regla

Una petición de vínculo en un método o su tipo declarativo exige que el llamador inmediato del método tenga el permiso especificado. Una petición de herencia en un método exige que un método reemplazante tenga el permiso especificado. Una petición de herencia en un tipo exige que una clase derivada tenga el permiso especificado.

Cómo corregir infracciones

Para corregir una infracción de esta regla, proteja el tipo o el método con una petición de herencia para el mismo permiso que la petición de vínculo.

Cuándo suprimir advertencias

No suprima las advertencias de esta regla.

Ejemplo

El siguiente ejemplo muestra un tipo que infringe la regla.

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() {}
    };
}

Reglas relacionadas

Revisar la seguridad declarativa en los tipos de valores

Los tipos seguros no deberían exponer campos

No exponer indirectamente métodos con peticiones de vínculos

Las peticiones de vínculos de reemplazo deberían ser idénticas a la base

Vea también

Conceptos

Peticiones de herencia

Peticiones de vínculos

Otros recursos

Instrucciones de codificación segura

Acceso a datos