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 |
Sí |
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