CA2140: Il codice Transparent non deve far riferimento a elementi SecurityCritical
Articolo | Valore |
---|---|
ID regola | CA2140 |
Category | Microsoft.Security |
Modifica | Interruzione |
Causa
Metodo trasparente:
gestisce un tipo di eccezione di sicurezza critico per la sicurezza
ha un parametro contrassegnato come tipo critico per la sicurezza
ha un parametro generico con vincoli critici per la sicurezza
ha una variabile locale di un tipo critico di sicurezza
fa riferimento a un tipo contrassegnato come critico per la sicurezza
chiama un metodo contrassegnato come critico per la sicurezza
fa riferimento a un campo contrassegnato come critico per la sicurezza
restituisce un tipo contrassegnato come critico per la sicurezza
Nota
Questa regola è stata deprecata. Per altre informazioni, vedere Regole deprecate.
Descrizione regola
Un elemento di codice contrassegnato con l'attributo è critico per la SecurityCriticalAttribute sicurezza. Un metodo trasparente non può usare un elemento critico per la sicurezza. Se un tipo trasparente tenta di usare un tipo critico per la sicurezza, viene generato un TypeAccessExceptiontipo , MethodAccessException o FieldAccessException .
Come correggere le violazioni
Per correggere una violazione di questa regola, eseguire una delle operazioni seguenti:
Contrassegnare l'elemento di codice che usa il codice critico per la sicurezza con l'attributo SecurityCriticalAttribute
- oppure -
Rimuovere l'attributo SecurityCriticalAttribute dagli elementi di codice contrassegnati come critici per la sicurezza e contrassegnarli con l'attributo SecuritySafeCriticalAttribute o SecurityTransparentAttribute .
Quando eliminare gli avvisi
Non escludere un avviso da questa regola.
Esempio
Negli esempi seguenti un metodo trasparente tenta di fare riferimento a una raccolta generica critica per la sicurezza, a un campo critico per la sicurezza e a un metodo critico per la sicurezza.
using System;
using System.Security;
using System.Collections.Generic;
namespace TransparencyWarningsDemo
{
[SecurityCritical]
public class SecurityCriticalClass { }
public class TransparentMethodsReferenceCriticalCodeClass
{
[SecurityCritical]
private object m_criticalField;
[SecurityCritical]
private void CriticalMethod() { }
public void TransparentMethod()
{
// CA2140 violation - transparent method accessing a critical type. This can be fixed by any of:
// 1. Make TransparentMethod critical
// 2. Make TransparentMethod safe critical
// 3. Make CriticalClass safe critical
// 4. Make CriticalClass transparent
List<SecurityCriticalClass> l = new List<SecurityCriticalClass>();
// CA2140 violation - transparent method accessing a critical field. This can be fixed by any of:
// 1. Make TransparentMethod critical
// 2. Make TransparentMethod safe critical
// 3. Make m_criticalField safe critical
// 4. Make m_criticalField transparent
m_criticalField = l;
// CA2140 violation - transparent method accessing a critical method. This can be fixed by any of:
// 1. Make TransparentMethod critical
// 2. Make TransparentMethod safe critical
// 3. Make CriticalMethod safe critical
// 4. Make CriticalMethod transparent
CriticalMethod();
}
}
}
Vedi anche
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