カスタム サーバー コントロールのセキュリティ保護
更新 : 2007 年 11 月
カスタム サーバー コントロールは、ASP.NET Web サーバー コントロールの機能を拡張する 1 つの方法です。次の基本的なセキュリティ ガイドラインは、カスタム サーバー コントロールのユーザーと開発者向けに用意されています。カスタム サーバー コントロールの作成の詳細については、「ASP.NET カスタム サーバー コントロールの開発」を参照してください。
Microsoft Visual Studio 2005 などの IDE は、カスタム コントロールの使用だけでなく、開発も簡単にします。ただし、以下のセキュリティ ガイドラインは、使用する IDE に関係なく適用されます。
ASP.NET Web アプリケーションのセキュリティに関する一般的な情報については、「ASP.NET Web アプリケーションのセキュリティ」を参照してください。
カスタム サーバー コントロールのユーザー向けガイドライン
カスタム サーバー コントロールを Web アプリケーションで使用する方法は多数あります。たとえば、ソース コード ファイルを Web アプリケーションの App_Code フォルダに直接配置する方法、グローバル アセンブリ キャッシュのコントロールを使用する方法、または Visual Studio コンテンツ インストーラなどの自動インストーラでインストールされるコミュニティ コンポーネントを使用する方法があります。どの場合でも、悪意のあるコードや、意図していなくてもコンポーネントをホストする IDE またはサーバーに望ましくない影響を与えるコードをインポートすることには注意する必要があります。
カスタム サーバー コントロールのユーザーが考慮する必要があるセキュリティ ガイドラインの一部を以下に示します。この一覧はすべてを列挙したものではなく、調査の起点として用意しました。
よく知らないコードや、セキュリティとの関連性がわからないコードは操作しないでください。コミュニティ コンポーネントの場合、入手できる発行者の情報を読み、コンポーネントが署名されているかどうかを確認します。 詳細については方法 : Visual Studio コンテンツ インストーラを使用するためにコミュニティのコンポーネントをパッケージ化する および方法 : Visual Studio コンテンツ インストーラを使用するためにコミュニティのコンポーネントをパッケージ化する および方法: Visual Studio コンテンツ インストーラーを使用するためにコンポーネントをパッケージ化する および方法: Visual Studio コンテンツ インストーラーを使用するためにコンポーネントをパッケージ化する.
コントロールの実行時のセキュリティだけでなく、デザイン時のセキュリティについても考慮します。詳細については、「カスタム コントロール デザイナ コンポーネントの保護」を参照してください。
可能であれば、厳密な名前が指定されたアセンブリにある、信頼できる発行者によるカスタム コントロールで作業します。詳細については、「方法 : アセンブリの完全修飾名を特定する」を参照してください。
最小限の権限があるアカウントで、インポートしたコントロールを含む ASP.NET Web アプリケーションを実行します。最小限のアクセス許可を付与された ID で ASP.NET プロセスを実行する方法の詳細については、「ASP.NET プロセス ID の構成」を参照してください。Visual Studio 2005 や Visual Web Developer Express などの IDE では、管理タスクを実行する必要がなければ、管理者ではなく通常のユーザーでアプリケーションを実行します。 詳細についてはユーザーのアクセス許可と Visual Studio およびユーザー権利と Visual Studio およびユーザー権利と Visual Studio.
カスタム サーバー コントロールをホストするサーバーについて、オペレーティング システムのセキュリティと Web アクセス制御リスト (ACL: Access Control Lists) を確認します。たとえば、ASP.NET プロセスは、アプリケーションを実行するために必要な最小限のアクセス許可のみを付与された ID を使用して実行します。これは、カスタム サーバー コントロールによるセキュリティ違反が他のホスト対象アプリケーションに与える影響を最小限に抑えるためです。詳細については、「ASP.NET プロセス ID の構成」を参照してください。また、カスタム サーバー コントロールのアクセス許可について、ASP.NET Web アプリケーションの ID が正しく機能するために必要なファイルおよびフォルダのアクセス許可に従っていることを確認します。詳細については、「ASP.NET の必須アクセス制御リスト (ACL)」を参照してください。
コード アクセス セキュリティを使用して、(カスタム サーバー コントロールを使用する) Web アプリケーションがアクセスできるリソースと、実行を許可された操作を制限します。詳細については、「ASP.NET コード アクセス セキュリティ」を参照してください。
.NET Framework 構成ツール (Mscorcfg.msc) を使用して、グローバル アセンブリ キャッシュのアセンブリを管理および設定し、コード アクセス セキュリティのポリシーを調整します。Mscorcfg.msc は、上級管理者がアプリケーションの構成に関連する作業を行うのをサポートすることを目的としているので、システム管理者と連携して、その使用が状況にあっているかどうかを決定します。詳細については、「.NET Framework 構成ツール (Mscorcfg.msc)」を参照してください。
カスタム サーバー コントロールの開発者向けガイドライン
カスタム コントロールを開発する場合、ASP.NET アプリケーションのページとコントロールのセキュリティ、および .NET Framework のセキュリティについて、一般的なベスト プラクティスに従います。多くの場合、カスタム サーバー コントロールのユーザーは、すべての実装の詳細やセキュリティの関連事項を意識しません。そのために、確立しているセキュリティ規約に従い、コンポーネントが機能するために必要なすべてのアクセス許可を明確に呼び出して計画します。ASP.NET Web サイトのセキュリティを使用した Web アプリケーションの一般的なセキュリティ問題と解決方法は、「.NET Framework 開発者ガイド」の 「セキュリティの基本概念」、および「Patterns and Practices Web サイト」のセキュリティに関するトピックで、Web アプリケーションに一般的なセキュリティ問題と解決方法を調べることができます。
カスタム Web サーバー コントロールを設計して実装した後は、コンポーネントをユーザーに配布する方法を決めます。配布には 2 つの一般的な方法があります。アセンブリとして、またはコミュニティ コンポーネントとして配布する方法です。コンポーネントをアセンブリとして配布する場合、アセンブリに署名します (厳密な名前の署名とも呼ばれます)。署名によって、他のソフトウェアが識別でき、明示的に参照できる固有の ID がアセンブリに付与されます。「アセンブリを使用したプログラミング」で説明するように、他の利点もあります。
自動インストール手順でコミュニティ コンポーネントとしてコンポーネントを配布する場合、コンポーネントに暗号化して署名します。送信元に固有のデジタル署名を作成することで、データが特定の人から送信されたことを署名で確認するときに役立ちます。Visual Studio 2005 を使用してコミュニティ コンポーネントを作成する方法の 1 つは、Visual Studio コンテンツ インストーラを使用し、署名できる .vsi ファイルを作成する方法です。 詳細については方法 : Visual Studio コンテンツ インストーラを使用するためにコミュニティのコンポーネントをパッケージ化する および方法 : Visual Studio コンテンツ インストーラを使用するためにコミュニティのコンポーネントをパッケージ化する および方法: Visual Studio コンテンツ インストーラーを使用するためにコンポーネントをパッケージ化する および方法: Visual Studio コンテンツ インストーラーを使用するためにコンポーネントをパッケージ化する.
カスタム サーバー コントロール コンポーネントを開発するときに考慮するセキュリティ ガイドラインの一部を以下に示します。この一覧はすべてを列挙したものではなく、調査の起点として用意しました。
カスタム サーバー コントロールの使用方法と、正常に機能するために必要なリソースとアクセス許可の内容について指示します。
コンポーネントにデジタル署名します。カスタム コントロールをアセンブリとしてパッケージ化し、厳密な名前でアセンブリに署名します。詳細については、「厳密な名前付きアセンブリの作成と使用」を参照してください。Visual Studio コンテンツ インストーラなどの自動インストーラを使用する場合も、コンポーネントに署名します。 詳細については方法 : Visual Studio コンテンツ インストーラを使用するためにコミュニティのコンポーネントをパッケージ化する および方法 : Visual Studio コンテンツ インストーラを使用するためにコミュニティのコンポーネントをパッケージ化する および方法: Visual Studio コンテンツ インストーラーを使用するためにコンポーネントをパッケージ化する および方法: Visual Studio コンテンツ インストーラーを使用するためにコンポーネントをパッケージ化する.
コードの例外管理についてベスト プラクティスに従います。詳細については、「Patterns and Practices Web サイト」の「Chapter 10」などを参照してください。
カスタム コントロールをビジュアル デザイナのツールボックスに追加すること、デザイン サーフェイスにドラッグすること、およびプロパティ ブラウザのプロパティとイベントにアクセスすることをページ開発者が実行できるようにする場合、実行時のセキュリティだけでなく、デザイン時のセキュリティについても考慮します。詳細については、「カスタム コントロール デザイナ コンポーネントの保護」を参照してください。
Web アプリケーションのページとコントロールに対する主な脅威を理解します。たとえば、コードの挿入、情報の公開、セッションのハイジャック、ID のなりすまし、パラメータの操作、およびネットワークの傍受が含まれます。このために、コンポーネントを配置する前にコンポーネントの脅威モデルの分析を完了します。詳細については、「Patterns and Practices Web サイト」の「Threat Modeling Web Applications」を参照してください。