部分信頼コードからのライブラリの使用Using Libraries from Partially Trusted Code

注意事項

コード アクセス セキュリティと部分的に信頼できるコード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.

注意

このトピックでは、厳密な名前付きアセンブリの動作に対処しにのみ適用されますレベル 1アセンブリ。This topic addresses the behavior of strong-named assemblies and applies only to Level 1 assemblies. 透過的セキュリティ コード、レベル 2厳密な名前でアセンブリ、.NET Framework 4 以降を受けません。Security-Transparent Code, Level 2 assemblies in the .NET Framework 4 or later are not affected by strong names. セキュリティ システムへの変更の詳細については、次を参照してください。セキュリティ変更します。For more information about changes to the security system, see Security Changes.

ホストまたはサンドボックスから不完全な信頼を受けているアプリケーションは、ライブラリの作成者が AllowPartiallyTrustedCallersAttribute 属性を使用して具体的に許可しない限り、共有マネージド ライブラリを呼び出せません。Applications that receive less than full trust from their host or sandbox are not allowed to call shared managed libraries unless the library writer specifically allows them to through the use of the AllowPartiallyTrustedCallersAttribute attribute. そのため、アプリケーションの作成者は、ライブラリによっては部分的に信頼されたコンテキストから使用できないことを認識する必要があります。Therefore, application writers must be aware that some libraries will not be available to them from a partially trusted context. 既定では、すべてのコードで実行する部分的に信頼されたサンド ボックスではありません。 完全信頼アセンブリの一覧が部分的に信頼されているとします。By default, all code that executes in a partial-trust sandbox and is not in the list of full-trust assemblies is partially trusted. 部分的に信頼されたコンテキストからコードを実行する、または部分的に信頼されたコードによってコードが呼び出されることはないと考えられる場合は、このセクションの情報を考慮する必要はありません。If you do not expect your code to be executed from a partially trusted context or to be called by partially trusted code, you do not have to be concerned about the information in this section. ただし、部分的に信頼されたコードと対話する必要があるコード、または部分的に信頼されたコンテキストから操作するコードを記述する場合は、次の要因を考慮する必要があります。However, if you write code that must interact with partially trusted code or operate from a partially trusted context, you should consider the following factors:

  • ライブラリは、複数のアプリケーションで共有するために、厳密な名前で署名する必要があります。Libraries must be signed with a strong name in order to be shared by multiple applications. 厳密な名前を使用すると、コードをグローバル アセンブリ キャッシュに配置したり、サンドボックス化する AppDomain の完全信頼一覧に追加したりできます。また、コンシューマーは、実際にあなたが発信する特定のモバイル コードを確認することができます。Strong names allow your code to be placed in the global assembly cache or added to the full-trust list of a sandboxing AppDomain, and allow consumers to verify that a particular piece of mobile code actually originates from you.

  • 既定では、厳密な名前レベル 1共有ライブラリを暗黙的な実行LinkDemand完全でライブラリの作成者が何もすることを自動的に信頼します。By default, strong-named Level 1 shared libraries perform an implicit LinkDemand for full trust automatically, without the library writer having to do anything.

  • 呼び出し元に完全な信頼がないにもかかわらず、このようなライブラリを呼び出そうとする場合、ランタイムは SecurityException をスローします。これにより、呼び出し元はライブラリにリンクできなくなります。If a caller does not have full trust but still tries to call such a library, the runtime throws a SecurityException and the caller is not allowed to link to the library.

  • 自動を無効にするにはLinkDemandからスローされる例外を防ぐため、配置することができます、 AllowPartiallyTrustedCallersAttribute共有アセンブリのスコープに属性ライブラリです。In order to disable the automatic LinkDemand and prevent the exception from being thrown, you can place the AllowPartiallyTrustedCallersAttribute attribute on the assembly scope of a shared library. この属性により、部分的に信頼されたマネージド コードからライブラリを呼び出すことができます。This attribute allows your libraries to be called from partially trusted managed code.

  • それでも、この属性を持つライブラリへのアクセスが許可されている部分的に信頼されたコードは、AppDomain が定義する追加の制約を受けます。Partially trusted code that is granted access to a library with this attribute is still subject to further restrictions defined by the AppDomain.

  • 部分的に信頼されたコードがないライブラリを呼び出すことのプログラムによる方法はありません、 AllowPartiallyTrustedCallersAttribute属性。There is no programmatic way for partially trusted code to call a library that does not have the AllowPartiallyTrustedCallersAttribute attribute.

特定のアプリケーションをプライベートなライブラリは、厳密な名前を必要としない、またはAllowPartiallyTrustedCallersAttribute属性し、悪意のあるコード、アプリケーションの外部から参照できません。Libraries that are private to a specific application do not require a strong name or the AllowPartiallyTrustedCallersAttribute attribute and cannot be referenced by potentially malicious code outside the application. このようなコードは、部分的に信頼されたモバイル コードの意図的または意図的でない誤使用から保護されています。開発者は追加で何かをする必要はありません。Such code is protected against intentional or unintentional misuse by partially trusted mobile code without the developer having to do anything extra.

次の種類のコードについて、部分的に信頼されたコードによる使用を明示的に有効にすることを検討してください。You should consider explicitly enabling use by partially trusted code for the following types of code:

  • セキュリティの脆弱性を入念にテストされているし、で説明されているガイドラインに準拠しているがコードを安全なコーディングのガイドラインします。Code that has been diligently tested for security vulnerabilities and is in compliance with the guidelines described in Secure Coding Guidelines.

  • 部分的に信頼されたシナリオ用に特に記述された厳密な名前のコード ライブラリ。Strong-named code libraries that are specifically written for partially trusted scenarios.

  • インターネットからダウンロードしたコードによって呼び出される、厳密な名前で署名された (部分的に信頼された、または完全に信頼された) すべてのコンポーネント。Any components (whether partially or fully trusted) signed with a strong name that will be called by code that is downloaded from the Internet.

注意

.NET Framework クラス ライブラリのいくつかのクラスにはありません、 AllowPartiallyTrustedCallersAttribute属性し、部分的に信頼されたコードから呼び出すことはできません。Some classes in the .NET Framework class library do not have the AllowPartiallyTrustedCallersAttribute attribute and cannot be called by partially trusted code.

関連項目See also