更新 : 2007 年 11 月
TypeName |
SecurityTransparentAssembliesShouldNotContainSecurityCriticalCode |
CheckId |
CA2127 |
カテゴリ |
Microsoft.Security |
互換性に影響する変更点 |
あり |
原因
100% 透過的なアセンブリにクリティカルなコードを含めることはできません。
規則の説明
この規則では、100% 透過的なアセンブリを分析し、型、フィールド、およびメソッドのレベルで注釈の SecurityCritical を検出します。この規則の役に立つ点は、100% 透過的なアセンブリ内のコードにフラグが設定されることです。100% 透過的なアセンブリ内のコードは、実行時にセキュリティ例外または予測不可能な動作を引き起こします。
.NET Framework 2.0 には、透過性と呼ばれる機能が導入されました。メソッド、フィールド、インターフェイス、クラス、および型を個別的に透過的またはクリティカルとすることができます。
透過的なコードでは、セキュリティ特権を昇格することはできません。したがって、透過的なコードに付与または要求されるアクセス許可は、自動的にコードを通じて呼び出し元またはホスト AppDomain に渡されます。昇格の例として、Assert、LinkDemand、SuppressUnmanagedCode、アンセーフ コードなどがあります。
アセンブリは、100% 透過的、100% クリティカル、透過的/クリティカル混在のいずれかとなります。
アセンブリを 100% 透過的とマークするには、次のアセンブリ レベルの属性を追加します。
[assembly:System.Security.SecurityTransparent]
アセンブリを 100% クリティカルとマークするには、次のアセンブリ レベルの属性を追加します。
[assembly:System.Security.SecurityCritical(System.Security.SecurityCriticalScope.Everything)]
アセンブリを透過的/クリティカル混在とマークするには、次のアセンブリ レベルの属性を追加します。
[assembly:System.Security.SecurityCritical]
100% クリティカルなアセンブリに透過的なコードを含めることはできず、100% 透過的なアセンブリにクリティカルなコードを含めることはできません。
違反の修正方法
この問題を解決するには、アセンブリを透過的/クリティカル混在とマークするか、フラグが付いたコードから SecurityCritical 属性を削除します。
警告を抑制する状況
この規則によるメッセージは抑制しないでください。