CA2137:透明方法必須只包含可驗證的 IL
型別名稱 |
TransparentMethodsMustBeVerifiable |
CheckId |
CA2137 |
分類 |
Microsoft.Security |
中斷變更 |
中斷 |
原因
方法包含無法驗證的程式碼,或以傳址方式傳回型別。
規則描述
當安全性透明程式碼嘗試執行無法驗證的 MSIL (Microsoft Intermediate Language) 時,就會引發此規則。不過,此規則不包含完整的 IL 驗證器,並是使用啟發式來擷取多數的 MSIL 驗證違規情形。
若要確定您的程式碼只包含可驗證的 MSIL,請在您的組件上執行 Peverify.exe (PEVerify 工具)。搭配 /transparent 選項執行 PEVerify,此選項會將輸出限制為只有會造成錯誤的未經驗證透明方法。如果不使用 /transparent 選項,PEVerify 也會驗證允許包含未經驗證的程式碼的關鍵方法。
如何修正違規
若要修正此規則的違規情形,請在方法標記 SecurityCriticalAttribute 或 SecuritySafeCriticalAttribute 屬性,或者移除未經驗證的程式碼。
隱藏警告的時機
請勿隱藏此規則的警告。
範例
這個範例中的方法使用未經驗證的程式碼,且應標記 SecurityCriticalAttribute 或 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;
// }
}
}