Condividi tramite


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

Aggiornamento: novembre 2007

TypeName

TypeLinkDemandsRequireInheritanceDemands

CheckId

CA2126

Categoria

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.

Correzione di 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

Controllare la protezione dichiarativa sui tipi di valori

I tipi protetti non devono esporre campi

Non esporre in modo indiretto metodi con richieste di collegamento

Le richieste di collegamento negli override devono essere identiche a quelle nei metodi di base

Vedere anche

Concetti

Richieste di ereditarietà

Richieste di collegamento

Altre risorse

Indicazioni per la generazione di codice protetto

Accesso dati