コード アクセス セキュリティ ポリシーの互換性と移行Code Access Security Policy Compatibility and Migration


コード アクセス セキュリティと部分的に信頼できるコードCode Access Security and Partially Trusted Code

.NET Framework には、コード アクセス セキュリティ (CAS) と呼ばれる、同一アプリケーションで実行される各種コードにさまざまな信頼レベルを強制的に適用するメカニズムが備わっています。The .NET Framework provides a mechanism for the enforcement of varying levels of trust on different code running in the same application called Code Access Security (CAS). .NET Framework のコード アクセス セキュリティは、コードの実行元や他の ID 情報に基づいてセキュリティ境界を適用するメカニズムとして使用しないでください。Code Access Security in .NET Framework should not be used as a mechanism for enforcing security boundaries based on code origination or other identity aspects. 現在、部分的に信頼されるコード (特に実行元が不明なコード) では、コード アクセス セキュリティと透過的セキュリティ コードがセキュリティ境界としてサポートされないように、ガイダンスを更新しています。We are updating our guidance to reflect that Code Access Security and Security-Transparent Code will not be supported as a security boundary with partially trusted code, especially code of unknown origin. 発生元の不明なコードの読み込みと実行に関しては、他のセキュリティ対策を適切に導入することなく行わないようにしてください。We advise against loading and executing code of unknown origins without putting alternative security measures in place.

このポリシーは .NET Framework のすべてのバージョンに適用されますが、Silverlight に含まれる .NET Framework には適用されません。This policy applies to all versions of .NET Framework, but does not apply to the .NET Framework included in Silverlight.

コード アクセス セキュリティ (CAS) のポリシー部分廃止された .NET Framework 4 でします。The policy portion of code access security (CAS) has been made obsolete in the .NET Framework 4. その結果、発生するコンパイルの警告とランタイム例外、廃止されたポリシーの種類とメンバーを呼び出す場合明示的にまたは暗黙的に(を通じて他の型とメンバーを使用して)。As a result, you may encounter compilation warnings and runtime exceptions if you call the obsolete policy types and members explicitly or implicitly (through other types and members).

以下のいずれかの方法で警告やエラーを回避できます。You can avoid the warnings and errors by either:

このトピックは、次のセクションで構成されています。This topic contains the following sections:

明示的な使用Explicit Use

直接セキュリティ ポリシーを操作するメンバー、または CAS ポリシーをサンドボックス化することが必要なメンバーは廃止され、既定ではエラーを発生するようになりました。Members that directly manipulate security policy or require CAS policy to sandbox are obsolete and will produce errors by default.

以下に例を示します。Examples of these are:

暗黙的な使用Implicit Use

アセンブリの読み込みオーバーロードの中にはエラーを生成するものがあります。CAS ポリシーを暗黙的に使用することが原因です。Several assembly loading overloads produce errors because of their implicit use of CAS policy. これらのオーバーロードはCAS ポリシーを解決するために Evidence パラメーターを取り、アセンブリにアクセス許可セットを提供します。These overloads take an Evidence parameter that is used to resolve CAS policy and provide a permission grant set for an assembly.

以下に例をいくつか示します。Here are some examples. パラメーターとして Evidence を取るオーバーロードが廃止されました。The obsolete overloads are those that take Evidence as a parameter:

エラーと警告Errors and Warnings

廃止された種類とメンバーが使用されると、以下のエラー メッセージが生成されます。The obsolete types and members produce the following error messages when they are used. System.Security.Policy.Evidence 型自体は廃止されていないことに注意してください。Note that the System.Security.Policy.Evidence type itself is not obsolete.

コンパイル時の警告:Compile-time warning:

warning CS0618: '<API Name>' is obsolete: 'This method is obsolete and will be removed in a future release of the .NET Framework. Please use <suggested alternate API>. See <link> for more information.'

実行時の例外:Run-time exception:

NotSupportedException: This method uses CAS policy, which has been obsoleted by the .NET Framework. In order to enable CAS policy for compatibility reasons, please use the <NetFx40_LegacySecurityPolicy> configuration switch. Please see <link> for more information.NotSupportedException: This method uses CAS policy, which has been obsoleted by the .NET Framework. In order to enable CAS policy for compatibility reasons, please use the <NetFx40_LegacySecurityPolicy> configuration switch. Please see <link> for more information.

移行:廃止された呼び出しの置換Migration: Replacement for Obsolete Calls

アセンブリの信頼レベルの判別Determining an Assembly’s Trust Level

CAS ポリシーは多くの場合、アセンブリ、アプリケーション ドメインのアクセス許可セット、または信頼レベルを判断するために使用されます。CAS policy is often used to determine an assembly’s or application domain’s permission grant set or trust level. .NET Framework 4 では、セキュリティ ポリシーを解決する必要のない次の便利なプロパティを公開します。The .NET Framework 4 exposes the following useful properties that do not need to resolve security policy:

アプリケーション ドメインのサンドボックス化Application Domain Sandboxing

通常 AppDomain.SetAppDomainPolicy メソッドは、アプリケーション ドメイン内のアセンブリをサンド ボックス化するために使用します。The AppDomain.SetAppDomainPolicy method is typically used for sandboxing the assemblies in an application domain. .NET Framework 4 で公開されるメンバーを使用する必要はありませんがPolicyLevelこの目的のためです。The .NET Framework 4 exposes members that do not have to use PolicyLevel for this purpose. 詳細については、「方法 :Run Partially Trusted Code in a Sandbox」 (方法: サンドボックスで部分信頼コードを実行する) を参照してください。For more information, see How to: Run Partially Trusted Code in a Sandbox.

部分的に信頼できるコードに対する安全なまたは適切なアクセス許可セットの決定Determining a Safe or Reasonable Permission Set for Partially Trusted Code

多くの場合ホストでは、ホストされているコードをサンドボックス化するための適切なアクセス許可を判別する必要があります。Hosts often need to determine the permissions that are appropriate for sandboxing hosted code. CAS ポリシーがこれを行う方法を提供する、.NET Framework 4 の前に、SecurityManager.ResolvePolicyメソッド。Before the .NET Framework 4, CAS policy provided a way to do this with the SecurityManager.ResolvePolicy method. 代わりに、.NET Framework 4 の提供、SecurityManager.GetStandardSandbox安全な標準的な権限が指定された証拠のセットを返すメソッド。As a replacement, .NET Framework 4 provides the SecurityManager.GetStandardSandbox method, which returns a safe, standard permission set for the provided evidence.

サンド ボックス化以外のシナリオ:アセンブリ読み込みのオーバー ロードNon-Sandboxing Scenarios: Overloads for Assembly Loads

アセンブリ読み込みオーバーロードを使用する目的は、アセンブリのサンドボックス化の代わりに、アセンブリ読み込みオーバーロードでないと使用できないパラメーターを指定することです。The reason for using an assembly load overload might be to use parameters that are not otherwise available, instead of sandboxing the assembly. 以降、.NET Framework 4 では、アセンブリの読み込みを必要としないオーバー ロードをSystem.Security.Policy.EvidenceオブジェクトをパラメーターとしてAppDomain.ExecuteAssembly(String, String[], Byte[], AssemblyHashAlgorithm)、このシナリオを実現します。Starting with the .NET Framework 4, assembly load overloads that do not require a System.Security.Policy.Evidence object as a parameter, for example, AppDomain.ExecuteAssembly(String, String[], Byte[], AssemblyHashAlgorithm), enable this scenario.

アセンブリをサンドボックス化する場合には、AppDomain.CreateDomain(String, Evidence, AppDomainSetup, PermissionSet, StrongName[]) オーバー ロードを使用します。If you want to sandbox an assembly, use the AppDomain.CreateDomain(String, Evidence, AppDomainSetup, PermissionSet, StrongName[]) overload.

互換性:CAS ポリシーのレガシー オプションを使用します。Compatibility: Using the CAS Policy Legacy Option

<NetFx40_LegacySecurityPolicy > 構成要素プロセスまたはライブラリが、従来の CAS ポリシーを使用するように指定することができます。The <NetFx40_LegacySecurityPolicy> configuration element lets you specify that a process or library uses legacy CAS policy. この要素を有効にすると、ポリシーと証拠のオーバーロードは、framework の以前のバージョンの場合と同様に動作します。When you enable this element, the policy and evidence overloads will work as they did in previous versions of the framework.


CAS ポリシーの動作は特定のランタイム バージョンに固有なので、そのランタイム バージョンの CAS ポリシーを変更しても、別のバージョンの CAS ポリシーには影響しません。CAS policy behavior is specified on a runtime version basis, so modifying CAS policy for one runtime version does not affect the CAS policy of another version.

      <NetFx40_LegacySecurityPolicy enabled="true"/>

関連項目See also