Sdílet prostřednictvím


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

}