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() { }
}
}
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: Nel corso del 2024 verranno gradualmente disattivati i problemi di GitHub come meccanismo di feedback per il contenuto e ciò verrà sostituito con un nuovo sistema di feedback. Per altre informazioni, vedereInvia e visualizza il feedback per