Condividi tramite


CA2137: I metodi Transparent devono contenere solo IL verificabile

TypeName

TransparentMethodsMustBeVerifiable

CheckId

CA2137

Category

Microsoft.Security

Breaking Change

Breaking

Causa

Un metodo contiene codice non verificabile o restituisce un tipo tramite riferimento.

Descrizione della regola

Questa regola viene attivata sui tentativi tramite codice trasparente per la sicurezza per eseguire MSIL (Microsoft Intermediate Language) non verificabile. Tuttavia, la regola non contiene un verificatore di IL completo, ma utilizza invece regole euristiche per intercettare la maggior parte delle violazioni di verifica MSIL.

Per essere sicuro che il codice contiene solo MSIL verificabile, eseguire Peverify.exe (strumento PEVerify) sull'assembly. Eseguire PEVerify con l'opzione /transparent che limita l'output solo ai metodi trasparenti non verificabile che provocherebbero un errore. Se l'opzione /trasparent non viene utilizzata, PEVerify verifica anche i metodi critici che possono contenere codice non verificabile.

Come correggere le violazioni

Per correggere una violazione di questa regola, contrassegnare il metodo con l'attributo SecurityCriticalAttribute o SecuritySafeCriticalAttribute o rimuovere il codice non verificabile.

Esclusione di avvisi

Non escludere un avviso da questa regola.

Esempio

Il metodo nell'esempio seguente utilizza codice non verificabile e deve essere contrassegnato con SecurityCriticalAttribute o con l'attributo 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;
    //    }
    }

}