Partager via


CA2126 : Les demandes de liaison de types nécessitent des demandes d'héritage

TypeName

TypeLinkDemandsRequireInheritanceDemands

CheckId

CA2126

Catégorie

Microsoft.Security

Modification avec rupture

Oui

Cause

Un type unsealed public est protégé avec une demande de liaison, a une méthode substituable, et ni le type ni la méthode n'est protégé par une demande d'héritage.

Description de la règle

Une demande de liaison sur une méthode ou son type déclarant requiert que l'appelant immédiat de la méthode ait l'autorisation spécifiée. Une demande d'héritage sur une méthode requiert qu'une méthode de substitution ait l'autorisation spécifiée. Une demande d'héritage sur un type requiert qu'une classe dérivée ait l'autorisation spécifiée.

Comment corriger les violations

Pour corriger une violation de cette règle, sécurisez le type ou la méthode avec une demande d'héritage pour la même autorisation que la demande de liaison.

Quand supprimer les avertissements

Ne supprimez aucun avertissement de cette règle.

Exemple

L'exemple suivant présente un type qui enfreint la règle.

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

Règles connexes

CA2108 : Vérifiez la sécurité déclarative dans les types valeur

CA2112 : Les types sécurisés ne doivent pas exposer de champs

CA2122 : N'exposez pas indirectement des méthodes avec des demandes de liaison

CA2123 : Les demandes de liaison de substitution doivent être identiques au composant de base

Voir aussi

Concepts

Instructions de codage sécurisé

Demandes d'héritage

Demandes de liaison

Demandes