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;
// }
}
}