Freigeben über


CA2140: Transparenter Code darf nicht auf sicherheitskritische Elemente verweisen.

Element Wert
RuleId CA2140
Category Microsoft.Security
Unterbrechende Änderung Breaking

Ursache

Eine transparente Methode:

  • behandelt einen sicherheitskritischen Sicherheitsausnahmetyp.

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

  • verfügt über einen generischen Parameter mit sicherheitskritischen Einschränkungen.

  • verfügt über eine lokale Variable eines sicherheitskritischen Typs.

  • verweist auf einen Typ, der als sicherheitskritisch gekennzeichnet ist.

  • ruft eine Methode auf, die als sicherheitskritisch gekennzeichnet ist.

  • verweist auf ein Feld, das als sicherheitskritisch gekennzeichnet ist.

  • gibt einen Typ zurück, der als sicherheitskritisch gekennzeichnet ist.

Hinweis

Diese Regel wurde als veraltet markiert. Weitere Informationen finden Sie unter Veraltete Regeln.

Regelbeschreibung

Ein Codeelement, das mit dem SecurityCriticalAttribute-Attribut markiert ist, ist sicherheitskritisch. Eine transparente Methode kann kein sicherheitskritisches Element verwenden. Wenn ein transparenter Typ versucht, einen sicherheitskritischen Typ zu verwenden, wird eine 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();
        }
    }
}

Weitere Informationen