Freigeben über


CA2140: Transparenter Code darf nicht auf sicherheitskritische Elemente verweisen

TypeName

TransparentMethodsMustNotReferenceCriticalCode

CheckId

CA2140

Kategorie

Microsoft.Security

Unterbrechende Änderung

Breaking

Ursache

Eine transparente Methode:

  • behandelt einen sicherheitskritischen Sicherheitsausnahmetyp

  • verfügt über einen Parameter, der als sicherheitskritischer Typ markiert ist

  • hat einen generischen Parameter mit sicherheitskritischen Einschränkungen

  • verfügt über eine lokale Variable von einem sicherheitskritischen Typ

  • verweist auf einen Typ, der als sicherheitskritisch markiert ist

  • ruft eine Methode auf, die als sicherheitskritisch markiert ist

  • verweist auf ein Feld, das als sicherheitskritisch markiert ist

  • Gibt einen Typ zurück, der als sicherheitskritisch markiert ist

Regelbeschreibung

Ein Code-Element, das mit dem SecurityCriticalAttribute-Attribut markiert ist, ist sicherheitsrelevant. Eine transparente Methode kann kein sicherheitskritisches Element verwenden. Wenn ein transparenter Typ einen sicherheitskritischen Typ verwendet, wird TypeAccessException, MethodAccessException oder FieldAccessException ausgelöst.

Behandeln von Verstößen

Führen Sie einen der folgenden Schritte aus, um einen Verstoß gegen diese Regel zu beheben:

Wann sollten Warnungen unterdrückt werden?

Unterdrücken Sie keine Warnung dieser Regel.

Beispiel

In den folgenden Beispielen versucht eine transparente Methode, auf eine sicherheitskritische generische Auflistung, ein sicherheitskritisches Feld und eine sicherheitskritische Methode zu verweisen.

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

Siehe auch

Referenz

SecurityTransparentAttribute

SecurityCriticalAttribute

SecurityTransparentAttribute

SecurityTreatAsSafeAttribute

System.Security