Condividi tramite


CA2140: Il codice Transparent non deve far riferimento a elementi SecurityCritical

TypeName

TransparentMethodsMustNotReferenceCriticalCode

CheckId

CA2140

Category

Microsoft.Security

Breaking Change

Breaking

Causa

Un metodo Trasparent:

  • gestisce un tipo di eccezione di sicurezza SecurityCritical

  • dispone di un parametro contrassegnato come un tipo SecurityCritical

  • dispone di un parametro generico con vincoli SecurityCritical

  • dispone di una variabile locale di un tipo SecurityCritical

  • fa riferimento a un tipo contrassegnato come SecurityCritical

  • chiama un metodo contrassegnato come SecurityCritical

  • fa riferimento a un campo contrassegnato come un tipo SecurityCritical

  • restituisce un tipo contrassegnato come SecurityCritical

Descrizione della regola

Un elemento di codice contrassegnato con l'attributo SecurityCriticalAttribute è SecurityCritical. Un metodo trasparente non può utilizzare un elemento critico per la sicurezza. Se il tipo trasparente tenta di utilizzare un tipo SecurityCritical viene generato TypeAccessException, MethodAccessException o FieldAccessException.

Come correggere le violazioni

Per correggere una violazione di questa regola, eseguire una delle seguenti azioni:

Esclusione di avvisi

Non escludere un avviso da questa regola.

Esempio

Negli esempi seguenti, un metodo trasparente tenta di fare riferimento a un insieme generico, un campo e un metodo SecurityCritical.

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();
        }
    }
}

Vedere anche

Riferimenti

SecurityTransparentAttribute

SecurityCriticalAttribute

SecurityTransparentAttribute

SecurityTreatAsSafeAttribute

System.Security