Windows フォームのセキュリティの概要
.NET Framework がリリースされるまでは、使用しているコンピューターで実行されるすべてのコードとそのコンピューターのユーザーは同じ権限やアクセス許可を持ち、ユーザーが保持するリソースにアクセスできました。 たとえば、ユーザーがファイル システムへのアクセスを許可されていた場合は、コードもファイル システムへのアクセスを許可されていました。ユーザーがデータベースへのアクセスを許可されていた場合は、コードもデータベースへのアクセスを許可されていました。 この権限またはアクセス許可は、ローカル コンピューターにユーザーが明示的にインストールした実行可能ファイルのコードでは承認できても、インターネットやローカルのイントラネットから受信した場合は悪意のあるコードの可能性があるため承認できないことがあります。 このようなコードは、アクセス許可がなければユーザーのコンピューター リソースにアクセスできないようにする必要があります。
.NET Framework には、コード アクセス セキュリティと呼ばれるインフラストラクチャが導入されています。これにより、コードの持つアクセス許可 (権限) がユーザーの持つ権限と区別されます。 インターネットおよびイントラネットから受信したコードは、既定で、部分信頼と呼ばれる方法でのみ実行できます。 部分信頼の場合、アプリケーションに複数の制限があります。まず、アプリケーションはローカルのハード ディスクへのアクセスに制限があり、アンマネージ コードを実行できません。 .NET Framework は、コードの ID に基づいて、そのコードにアクセスを許可するリソースを制御します。この ID には、コードの発行元、コードの厳密な名前付きアセンブリの有無、証明書と署名の有無などが含まれます。
Windows フォーム アプリケーションを配置するための技術である ClickOnce テクノロジを使用すれば、部分信頼アプリケーション、完全信頼アプリケーション、またはアクセス許可の昇格を伴う部分信頼アプリケーションを容易に開発できます。 ClickOnce には "アクセス許可の昇格"、"信頼されたアプリケーションの配置" などの機能が備わっており、アプリケーションからローカル ユーザーに対して、完全信頼または昇格されたアクセス許可を適切な方法で要求できます。
.NET Framework のセキュリティについての理解
コード アクセス セキュリティでは、コードの発生元と、コードの ID を構成するその他の要素に応じて、コードに与えられる信頼の度合いが変わってきます。 共通言語ランタイムがセキュリティ ポリシーの決定に使用する証拠の詳細については、「証拠」を参照してください。 それにより、悪意のあるコードからコンピューター システムを保護し、信頼されているコードが意図的または偶然にセキュリティを損なうことを防ぎやすくなります。 コード アクセス セキュリティを使用すると、必要なアクセス許可のみをアプリケーションに指定できるため、アプリケーションで実行できる動作を詳細に制御できるようになります。 コード アクセス セキュリティは、共通言語ランタイムを対象としたすべてのマネージ コードに影響します。コードが単一のコード アクセス セキュリティ アクセス許可チェックを行わない場合でも同様です。 .NET Framework のセキュリティの詳細については、「セキュリティの基本概念」および「コード アクセス セキュリティの基礎」を参照してください。
Web サーバーまたはファイル共有にないディレクトリの Windows フォームの実行可能ファイルを実行した場合、アプリケーションに許可される信頼レベルは、コードの位置と起動方法によって変わります。 アプリケーションは、実行されると自動的に評価され、共通言語ランタイムから名前付きのアクセス許可セットを受け取ります。 既定では、ローカル コンピューターからのコードには [完全な信頼] アクセス許可セットが与えられ、ローカル ネットワークからのコードには [イントラネット] アクセス許可セットが与えられ、インターネットからのコードには [インターネット] アクセス許可セットが与えられます。
注意
.NET Framework Version 1.0 Service Pack 1 および Service Pack 2 では、インターネット ゾーンのコード グループには [なし] アクセス許可セットが与えられます。 それ以外の .NET Framework のリリースでは、インターネット ゾーンのコード グループには [インターネット] アクセス許可セットが与えられます。
それぞれのアクセス許可セットで与えられる既定のアクセス許可の一覧については、「既定のセキュリティ ポリシー」を参照してください。 アプリケーションに与えられるアクセス許可に応じて、アプリケーションは適切に動作するか、またはセキュリティ例外を発生させます。
Windows フォーム アプリケーションの多くは、ClickOnce を使用して配置されます。 ClickOnce による配置を生成するときに使用するツールには、上記とは異なる既定のセキュリティがあります。 詳細については、次の説明を参照してください。
セキュリティ ポリシーは変更できるため、アプリケーションに与えられる実際のアクセス許可は既定の値と異なる場合があります。これは、あるコンピューターではアプリケーションにアクセス許可を与えられても、別のコンピューターでは与えられない場合があることを意味します。
より安全な Windows フォーム アプリケーションの開発
セキュリティは、アプリケーション開発のすべての段階において重要です。 「安全なコーディングのガイドライン」を確認し、その内容に従って開始してください。
次に、アプリケーションを完全信頼で実行するか、部分信頼で実行するかを決定します。 アプリケーションを完全信頼で実行すると、ローカル コンピューター上のリソースにアクセスしやすくなります。ただし、「安全なコーディングのガイドライン」に厳密に従ってアプリケーションのデザインと開発を行わないと、アプリケーションとユーザーのセキュリティ リスクは高くなります。 アプリケーションを部分信頼で実行すると、安全なアプリケーションが開発しやすく、リスクも低くなります。ただし、何か機能を実装する場合により細かい計画が必要になります。
部分信頼を選択した場合 (つまり、"インターネット" または "イントラネット" のアクセス許可セットの場合)、この環境のアプリケーションが実行できる内容を決定します。 Windows フォームには、信頼度の低い環境で機能を実装するために、より安全な代替手段が用意されています。 部分信頼環境と完全信頼環境を区別して、アプリケーションの一部 (データ アクセスなど) をデザインし、記述することもできます。 アプリケーション設定など、一部の Windows フォーム機能は、部分信頼で機能するように設計されます。 詳細については、「アプリケーション設定の概要」を参照してください。
部分信頼で許可しているよりも高度なアクセス許可が必要でも、完全信頼では実行できない場合、必要なアクセス許可のみを追加で与えて、部分信頼で実行できます。 たとえば、部分信頼で実行し、ユーザーのファイル システムにあるディレクトリへ読み取り専用のアクセスをアプリケーションに認める場合、そのディレクトリで、FileIOPermission のみを要求できます。 この手法を正しく使用すると、アプリケーションの機能を増やし、ユーザーのセキュリティ上のリスクを最小限に抑えることができます。
部分信頼で実行されるアプリケーションを開発するときは、アプリケーションをどのアクセス許可で実行する必要があるか、およびアプリケーションがオプションで使用する可能性のあるアクセス許可は何かを把握する必要があります。 すべてのアクセス許可が明らかになったら、アプリケーション レベルでアクセス許可に対する宣言的な要求を実行します。 アクセス許可を要求することで、アプリケーションが必要とするアクセス許可と、アプリケーションが明示的に必要としないアクセス許可が、.NET Framework ランタイムに通知されます。 アクセス許可の要求の詳細については、「アクセス許可の要求」および「アクセス許可要求」を参照してください。
オプションのアクセス許可を要求するときには、アプリケーションに与えられていないアクセス許可を必要とする処理をアプリケーションが実行したときに発生するセキュリティ例外を処理する必要があります。 SecurityException を適切に処理することで、アプリケーションが動作を確実に継続できるようになります。 アプリケーションは、例外を使用して、特定の機能をユーザーに対して無効にする必要があるかどうかを決定できます。 たとえば、アプリケーションは、必要なファイル アクセス許可が与えられていない場合に [上書き保存] メニュー オプションを無効にできます。
適切なアクセス許可をすべて与えたかどうかを確認するのは困難なこともあります。 たとえば、表面的には問題のないようなメソッドの呼び出しでも、実行時のある時点でファイル システムにアクセスすることがあります。 また、必要なアクセス許可すべてがアプリケーションに与えられていない場合、デスクトップでデバッグするときにはテストが成功しても、実際に配置すると失敗することがあります。 .NET Framework 2.0 SDK と Visual Studio 2005 のどちらにも、アプリケーションに必要なアクセス許可を計算するツールが含まれています。SDK では MT.exe コマンド ライン ツールを、Visual Studio では "アクセス許可の検出" 機能をそれぞれ使用できます。 詳細については 方法 : ClickOnce アプリケーションのアクセス許可を調べる および 方法 : ClickOnce アプリケーションのアクセス許可を調べる.
その他の Windows フォームのこれらのセキュリティ機能について、次のトピックで説明しています。
トピック |
説明 |
---|---|
部分信頼環境でファイルとデータにアクセスする方法について説明します。 |
|
部分信頼環境で印刷機能にアクセスする方法について説明します。 |
|
部分信頼環境におけるウィンドウ操作の実行、クリップボードの使用、およびアンマネージ コードの呼び出しについて説明します。 |
適切なアクセス許可でアプリケーションを配置する方法
Windows フォーム アプリケーションをクライアント コンピューターに配置する最も一般的な方法は、ClickOnce という、アプリケーションで実行する必要のあるコンポーネントをすべて記述する配置テクノロジを使用する方法です。 ClickOnce では、マニフェストと呼ばれる XML ファイルを使用して、アプリケーションを構成するアセンブリとファイル、およびアプリケーションが必要とするアクセス許可を記述します。
ClickOnce には、昇格されたアクセス許可をクライアント コンピューターで要求するための 2 つのテクノロジがあります。 どちらのテクノロジも、Authenticode 証明書の使用に依存しています。 この証明書は、アプリケーションが信頼された発行元から提供されていることをある程度保証します。
これらのテクノロジについて次の表で説明します。
高いレベルのアクセス許可テクノロジ |
説明 |
---|---|
アクセス許可の昇格 |
アプリケーションを初めて起動すると、セキュリティ ダイアログ ボックスが表示されます。 [アクセス許可の昇格] ダイアログ ボックスにはアプリケーションの発行元が表示されるため、その情報に基づいて、アクセス許可の追加を認めるかどうかを決定できます。 |
信頼されたアプリケーションの配置 |
システム管理者が、クライアント コンピューターで発行元の Authenticode 証明書を 1 回だけインストールします。 以降、このローカル コンピューターでは確認が表示されず、この証明書で署名済みのアプリケーションは信頼できると見なされ、完全信頼で実行されます。 |
選択するテクノロジは、配置環境によって異なります。 詳細については、「ClickOnce 配置ストラテジの選択」を参照してください。
既定では、Visual Studio または .NET Framework 2.0 SDK ツール (Mage.exe と MageUI.exe) を使用して配置された ClickOnce アプリケーションは、完全信頼を受けているクライアント コンピューターで動作するように構成されます。 部分信頼またはなんらかのアクセス許可を追加してアプリケーションを配置する場合は、この既定の構成を変更する必要があります。 そのためには、配置を構成するときに Visual Studio または .NET Framework 2.0 SDK ツールの MageUI.exe を使用します。 MageUI.exe の使用法の詳細については、「チュートリアル : ClickOnce アプリケーションを手動で配置する」を参照してください。 詳細については 方法 : ClickOnce アプリケーションのカスタム アクセス許可を設定する および 方法 : ClickOnce アプリケーションのカスタム アクセス許可を設定する および 方法 : ClickOnce アプリケーションのカスタム アクセス許可を設定する および 方法 : ClickOnce アプリケーションのカスタム アクセス許可を設定する.
ClickOnce とアクセス許可の昇格のセキュリティの詳細については、「ClickOnce アプリケーションのセキュリティ」を参照してください。 信頼されたアプリケーションの配置の詳細については、「信頼されたアプリケーションの配置の概要」を参照してください。
アプリケーションのテスト
Visual Studio を使用して Windows フォーム アプリケーションを配置した場合は、開発環境から、部分信頼または制限されたアクセス許可セットでのデバッグを有効にできます。 詳細については 方法 : アクセス許可が制限された ClickOnce アプリケーションをデバッグする および 方法 : アクセス許可が制限された ClickOnce アプリケーションをデバッグする および 方法 : アクセス許可が制限された ClickOnce アプリケーションをデバッグする および 方法 : アクセス許可が制限された ClickOnce アプリケーションをデバッグする.
参照
参照
MageUI.exe (マニフェスト生成および編集ツールのグラフィカル クライアント)