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