Windows フォームのセキュリティの概要
更新 : 2007 年 11 月
.NET Framework がリリースされるまでは、使用しているコンピュータで実行されるすべてのコードとそのコンピュータのユーザーは同じ権限やアクセス許可を持ち、ユーザが保持するリソースにアクセスできました。たとえば、ユーザーがファイル システムへのアクセスを許可されていた場合は、コードもファイル システムへのアクセスを許可されていました。ユーザーがデータベースへのアクセスを許可されていた場合は、コードもデータベースへのアクセスを許可されていました。この権限またはアクセス許可は、ローカル コンピュータにユーザーが明示的にインストールした実行可能ファイルのコードでは承認できても、インターネットやローカルのイントラネットから受信した場合は悪意のあるコードの可能性があるため承認できないことがあります。このようなコードは、アクセス許可がなければユーザーのコンピュータ リソースにアクセスできないようにする必要があります。
.NET Framework にはコード アクセス セキュリティと呼ばれるインフラストラクチャが導入されています。これを使用して、コードが持つアクセス許可 (権限) をユーザーが持つ権限と区別できます。インターネットおよびイントラネットから受信したコードは、既定で、部分信頼と呼ばれる方法でのみ実行できます。部分信頼の場合、アプリケーションに複数の制限があります。まず、アプリケーションはローカルのハード ディスクへのアクセスに制限があり、アンマネージ コードを実行できません。.NET Framework は、コードの ID に基づいて、そのコードにアクセスを許可するリソースを制御します。この ID には、コードの発生元、コードの厳密な名前付きアセンブリの有無、証明書と署名の有無などが含まれます。
ClickOnce テクノロジは、Windows フォーム アプリケーションを配置するときに使用します。このテクノロジを使用すると、部分信頼、完全信頼、またはより高いレベルのアクセス許可を持つ部分信頼で実行するアプリケーションを簡単に開発できます。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 のどちらにも、アプリケーションに必要なアクセス許可を計算するツール (MT.exe コマンド ライン ツール、Visual Studio の "アクセス許可の検出" 機能) が含まれています。
その他の 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)