CA2137: Transparentní metody musejí obsahovat pouze ověřitelné IL
Název_typu |
TransparentMethodsMustBeVerifiable |
CheckId |
CA2137 |
Kategorie |
Microsoft.Security |
Změnit rozdělení |
Rozdělení |
Příčina
Metoda obsahuje členovi nebo vrátí hodnotu typu odkaz.
Popis pravidla
Toto pravidlo je na pokusy o zabezpečení průhledných kódu spouštět nelze ověřit MSIL (Microsoft zprostředkující jazyk).Pravidlo však neobsahuje úplnou ověřovače IL a místo toho používá heuristiku zachytit většinu porušení MSIL ověření.
Chcete-li si být jisti, že kód obsahuje pouze ověřitelné MSIL, Peverify.exe (nástroj PEVerify) na váš sestavení.Spustit s PEVerify /transparent možnost, která omezuje výstup pouze nelze ověřit průhledných metod, které by způsobily chybu.Pokud / není použit parametr průhledné, PEVerify také ověří kritické metody, které mohou obsahovat členovi.
Jak opravit porušení
Porušení tohoto pravidla opravíte označit metodu s SecurityCriticalAttribute nebo SecuritySafeCriticalAttribute atributu nebo odebrat kód nelze ověřit.
Při potlačení upozornění
Nepotlačovat upozornění od tohoto pravidla.
Příklad
V tomto příkladu metoda používá členovi a musí být označena SecurityCriticalAttribute nebo SecuritySafeCriticalAttribute atributu.
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;
// }
}
}