安全性透明的組件不應該包含安全性關鍵程式碼
更新:2007 年 11 月
型別名稱 |
SecurityTransparentAssembliesShouldNotContainSecurityCriticalCode |
CheckId |
CA2127 |
分類 |
Microsoft.Security |
中斷變更 |
非中斷 |
原因
關鍵程式碼不能出現在 100% 透明的組件 (Assembly) 中。
規則描述
這項規則會分析 100% 透明組件中型別、欄位和方法層級的任何 SecurityCritical 附註。因為它會將存在 100% 透明組件中的程式碼加上旗標,所以非常有用。100% 透明組件中的程式碼會在執行階段觸發安全性例外狀況 (Exception) 或無法預期的行為。
.NET Framework 2.0 引入一項名為「透明度」的功能。個別方法、欄位、介面、類別和型別可以是透明或關鍵項目。
不能使用透明程式碼來評估安全性權限。因此,其已授與或要求的任何使用權限都會自動透過程式碼傳遞至呼叫端或主機 AppDomain。權限升級的範例包括 Assert、LinkDemand、SuppressUnmanagedCode 以及 'Unsafe' 程式碼。
組件可以是 100% 透明、100% 關鍵或是混合透明/關鍵。
若要將組件變成 100% 透明組件,請加入此組件層級屬性 (Attribute):
[assembly:System.Security.SecurityTransparent]
若要將組件變成 100% 關鍵組件,請加入此組件層級屬性:
[assembly:System.Security.SecurityCritical(System.Security.SecurityCriticalScope.Everything)]
若要將組件變成混合透明/關鍵組件,請加入此組件層級屬性:
[assembly:System.Security.SecurityCritical]
透明程式碼不能出現在 100% 關鍵的組件中,而關鍵程式碼則不能出現在 100% 透明的組件中。
如何修正違規
若要解決這個問題,請將組件標記為混合透明/關鍵,或是從已加上旗標的程式碼移除 SecurityCritical 屬性。
隱藏警告的時機
請勿隱藏此規則的訊息。