Share via


CA2133: Delegati devono essere associati ai metodi con trasparenza consistente

Articolo Valore
ID regola CA2133
Category Microsoft.Security
Modifica Interruzione

Nota

Questo avviso viene applicato solo al codice che esegue CoreCLR (la versione di CLR specifica per le applicazioni Web Silverlight).

Causa

Questo avviso viene generato su un metodo che associa un delegato contrassegnato con SecurityCriticalAttribute a un metodo trasparente o contrassegnato con .SecuritySafeCriticalAttribute L'avviso genera anche un metodo che associa un delegato che è trasparente o critico per la sicurezza a un metodo critico.

Nota

Questa regola è stata deprecata. Per altre informazioni, vedere Regole deprecate.

Descrizione regola

I tipi delegati e i metodi associati a devono avere trasparenza coerente. I delegati trasparenti e critici possono essere associati solo ad altri metodi trasparenti o critici. Analogamente, i delegati critici possono essere associati solo a metodi critici. Queste regole di associazione assicurano che l'unico codice in grado di richiamare un metodo tramite un delegato possa anche richiamare direttamente lo stesso metodo. Ad esempio, le regole di associazione impediscono al codice trasparente di chiamare il codice critico direttamente tramite un delegato trasparente.

Come correggere le violazioni

Per correggere una violazione di questo avviso, modificare la trasparenza del delegato o del metodo associato in modo che la trasparenza dei due elementi sia equivalente.

Quando eliminare gli avvisi

Non escludere un avviso da questa regola.

Codice

using System;
using System.Security;

namespace TransparencyWarningsDemo
{

    public delegate void TransparentDelegate();

    [SecurityCritical]
    public delegate void CriticalDelegate();

    public class TransparentType
    {
        void DelegateBinder()
        {
            // CA2133 violation - binding a transparent delegate to a critical method
            TransparentDelegate td = new TransparentDelegate(CriticalTarget);

            // CA2133 violation - binding a critical delegate to a transparent method
            CriticalDelegate cd = new CriticalDelegate(TransparentTarget);
        }

        [SecurityCritical]
        void CriticalTarget() { }

        void TransparentTarget() { }
    }
}