Condividi tramite


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:

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