Udostępnij za pośrednictwem


CA2137: Jawne metody muszą zawierać tylko weryfikowalne IL

TypeName

TransparentMethodsMustBeVerifiable

CheckId

CA2137

Kategoria

Microsoft.Security

Zmiana kluczowa

Kluczowa

Przyczyna

Metoda zawiera nieweryfikowalny kod lub zwraca typ przez odwołanie.

Opis reguły

Ta reguła jest uruchamiana podczas próby wykonywania przez kod przeźroczysty pod względem zabezpieczeń, nieweryfikowalnego MSIL (Microsoft Intermediate Language).Jednakże reguła nie zawiera pełnej weryfikacji IL i używa heurystyki do wykrywania większości naruszeń weryfikacji MSIL.

Aby uzyskać pewność, że kod zawiera tylko weryfikowalny MSIL, uruchom Peverify.exe (narzędzie PEVerify) na zestawie.Uruchom PEVerify z opcją /transparent, co ogranicza dane wyjściowe tylko do nieweryfikowalnych przezroczystych metod, które mogą powodować błąd.Jeśli opcja /transparent nie jest używana, PEVerify sprawdza również krytyczne metody, które mogą zawierać nieweryfikowalny kod.

Jak naprawić naruszenia

Aby naprawić naruszenie tej reguły, oznacz metodę atrybutem SecurityCriticalAttribute lub SecuritySafeCriticalAttribute, lub usuń nieweryfikowalny kod.

Kiedy pominąć ostrzeżenia

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

Przykład

Metoda w tym przykładzie używa nieweryfikowalnego kodu i powinna być oznaczona atrybutem SecurityCriticalAttribute lub SecuritySafeCriticalAttribute.

using System;
using System.Security;


namespace TransparencyWarningsDemo
{

    public class UnverifiableMethodClass
    {
        // CA2137 violation - transparent method with unverifiable code.  This method should become critical or 
        // safe critical  
    //    public unsafe byte[] UnverifiableMethod(int length) 
    //    { 
    //        byte[] bytes = new byte[length]; 
    //        fixed (byte* pb = bytes) 
    //        { 
    //            *pb = (byte)length; 
    //        } 

    //        return bytes; 
    //    }
    }

}