Udostępnij za pośrednictwem


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

Pozycja Wartość
Ruleid CA2140
Kategoria Microsoft.Security
Zmiana powodująca niezgodność Kluczowa

Przyczyna

Przezroczysta metoda:

  • obsługuje typ wyjątku zabezpieczeń krytycznego dla zabezpieczeń

  • ma parametr oznaczony jako typ krytyczny dla zabezpieczeń

  • ma parametr ogólny z ograniczeniami krytycznymi dla zabezpieczeń

  • ma zmienną lokalną typu krytycznego dla zabezpieczeń

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

  • wywołuje metodę oznaczoną jako krytyczne dla zabezpieczeń

  • odwołuje się do pola oznaczonego jako krytyczne dla zabezpieczeń

  • Zwraca typ oznaczony jako krytyczny dla zabezpieczeń

Uwaga

Ta reguła została przestarzała. Aby uzyskać więcej informacji, zobacz Przestarzałe reguły.

Opis reguły

Element kodu oznaczony atrybutem SecurityCriticalAttribute ma krytyczne znaczenie dla zabezpieczeń. Przezroczysta metoda nie może użyć elementu krytycznego dla zabezpieczeń. Jeśli typ przezroczysty próbuje użyć typu krytycznego dla zabezpieczeń, TypeAccessExceptionMethodAccessException , lub FieldAccessException jest zgłaszany.

Jak naprawić naruszenia

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

Kiedy pomijać ostrzeżenia

Nie pomijaj ostrzeżeń dla tej reguły.

Przykład

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

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ż