Udostępnij za pośrednictwem


CA2140: Jawny kod nie może odwoływać się do elementów krytycznych dla zabezpieczeń

TypeName

TransparentMethodsMustNotReferenceCriticalCode

CheckId

CA2140

Kategoria

Microsoft.Security

Zmiana kluczowa

Kluczowa

Przyczyna

Metoda przezroczysta:

  • obsługuje krytyczny pod względem zabezpieczeń typ wyjątku zabezpieczeń

  • ma parametr oznaczony jako typ krytyczny pod względem zabezpieczeń

  • posiada parametr generyczny z ograniczeniami krytycznymi pod względem zabezpieczeń

  • ma zmienną lokalną typu krytycznego pod względem zabezpieczeń

  • odwołuje się do typu, który jest oznaczony jako krytyczny pod względem zabezpieczeń

  • wywołuje metodę, która jest oznaczona jako krytyczna pod względem zabezpieczeń

  • odwołuje się do pola, które jest oznaczone jako krytyczne pod względem zabezpieczeń

  • zwraca typ, który jest oznaczony jako krytyczny pod względem zabezpieczeń

Opis reguły

Element kodu, oznaczony atrybutem SecurityCriticalAttribute jest krytyczny pod względem zabezpieczeń.Przezroczysta metoda nie może użyć elementu krytycznego pod względem zabezpieczeńJeśli typ przezroczysty próbuje użyć typu krytycznego pod względem zabezpieczeń, jest wyrzucany wyjątek TypeAccessException, MethodAccessException , lub FieldAccessException.

Jak naprawić naruszenia

Aby naprawić naruszenie tej zasady, wykonaj jedną z następujących czynności:

Kiedy pominąć ostrzeżenia

Nie należy pomijać ostrzeżenia dotyczącego tej reguły.

Przykład

W poniższych przykładach przezroczysta metoda próbuje odwołać się do krytycznej pod względem zabezpieczeń kolekcji generycznej, krytycznego pod względem zabezpieczeń pola i krytycznej pod względem zabezpieczeń metody.

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

Zobacz też

Informacje

SecurityTransparentAttribute

SecurityCriticalAttribute

SecurityTransparentAttribute

SecurityTreatAsSafeAttribute

System.Security