Condividi tramite


CA2126: Per le richieste di collegamento dei tipi sono necessarie richieste di ereditarietà

TypeName

TypeLinkDemandsRequireInheritanceDemands

CheckId

CA2126

Category

Microsoft.Security

Breaking Change

Breaking

Causa

Un tipo pubblico unsealed è protetto con una richiesta di collegamento, dispone di un metodo sottoponibile a override e né il tipo né il metodo sono protetti da una richiesta di ereditarietà.

Descrizione della regola

Una richiesta di collegamento su un metodo o il relativo tipo dichiarante richiede che il chiamante immediato del metodo disponga dell'autorizzazione specifica. Una richiesta di ereditarietà su un metodo richiede che un metodo che esegue l'override abbia l'autorizzazione specifica. Una richiesta di ereditarietà su un tipo richiede che una classe derivante disponga dell'autorizzazione specifica.

Come correggere le violazioni

Per correggere una violazione di questa regola, proteggere il tipo o il metodo con una richiesta di ereditarietà per la stessa autorizzazione della richiesta di collegamento.

Esclusione di avvisi

Non escludere un avviso da questa regola.

Esempio

Nell'esempio riportato di seguito viene illustrato un tipo che viola la regola.

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

Regole correlate

CA2108: Controllare la sicurezza dichiarativa sui tipi di valori

CA2112: I tipi protetti non devono esporre campi

CA2122: Non esporre in modo indiretto metodi con richieste di collegamento

CA2123: Le richieste di collegamento negli verrine devono essere identiche a quelle nei metodi di base

Vedere anche

Concetti

Linee guida per la generazione di codice sicuro

Richieste di ereditarietà

Richieste di collegamento

Richieste