次の方法で共有


Windows フォームのセキュリティの概要

重要

このコンテンツは、特に指定がない限り、.NET Framework にのみ適用されます。

.NET Framework のリリース前は、ユーザーのコンピューターで実行されているすべてのコードに、コンピューターのユーザーが持っていたリソースにアクセスするための同じ権限またはアクセス許可がありました。 たとえば、ユーザーがファイル システムへのアクセスを許可された場合、コードはファイル システムへのアクセスを許可されました。ユーザーがデータベースへのアクセスを許可された場合、コードはそのデータベースへのアクセスを許可されました。 これらの権限またはアクセス許可は、ユーザーがローカル コンピューターに明示的にインストールした実行可能ファイル内のコードに対して許容される場合がありますが、インターネットまたはローカル イントラネットから悪意のある可能性のあるコードを受け入れられない可能性があります。 このコードは、アクセス許可なしでユーザーのコンピューター リソースにアクセスできないようにする必要があります。

.NET Framework には、コード アクセス セキュリティと呼ばれるインフラストラクチャが導入されています。これにより、コードが持つアクセス許可 (権限) とユーザーが持つ権限を区別できます。 既定では、インターネットとイントラネットからのコードは、部分信頼と呼ばれるものでのみ実行できます。 部分信頼では、アプリケーションに一連の制限が適用されます。特に、アプリケーションはローカル ハード ディスクへのアクセスが制限され、アンマネージ コードを実行することはできません。 .NET Framework は、コードの ID (どこから来たか、Strong-Named アセンブリがかどうか、証明書で署名されているかどうかなど) に基づいて、コードがアクセスを許可されるリソースを制御します。

Windows フォーム アプリケーションの展開に使用する ClickOnce テクノロジを使用すると、昇格されたアクセス許可を使用して、部分信頼、完全信頼、または部分信頼で実行されるアプリケーションを簡単に開発できます。 ClickOnce には、アクセス許可の昇格や信頼されたアプリケーション配置などの機能が用意されているため、アプリケーションはローカル ユーザーに対して完全な信頼または昇格されたアクセス許可を責任ある方法で要求できます。

.NET Framework のセキュリティについて

コード アクセス セキュリティを使用すると、コードの発生場所やコードの ID の他の側面に応じて、さまざまな程度までコードを信頼できます。 共通言語ランタイムがセキュリティ ポリシーを決定するために使用する証拠の詳細については、「証拠」を参照してください。 悪意のあるコードからコンピューター システムを保護し、セキュリティを意図的または誤って侵害しないように信頼されたコードを保護するのに役立ちます。 また、コード アクセス セキュリティを使用すると、アプリケーションに必要なアクセス許可のみを指定できるため、アプリケーションで実行できるアクションをより詳細に制御できます。 コード アクセス セキュリティは、共通言語ランタイムを対象とするすべてのマネージド コードに影響します。そのコードが 1 つのコード アクセス セキュリティアクセス許可チェックを行わない場合でも、 .NET Framework のセキュリティの詳細については、「主要なセキュリティ概念」 および「コード アクセス セキュリティの基本」を参照してください。

ユーザーが Web サーバーまたはファイル共有から直接 Windows フォーム実行可能ファイルを実行する場合、アプリケーションに付与される信頼度は、コードが存在する場所と起動方法によって異なります。 アプリケーションを実行すると、アプリケーションは自動的に評価され、共通言語ランタイムから名前付きアクセス許可セットを受け取ります。 既定では、ローカル コンピューターのコードには完全信頼アクセス許可セットが付与され、ローカル ネットワークのコードにはローカル イントラネットのアクセス許可セットが付与され、インターネットからのコードにはインターネットアクセス許可セットが付与されます。

.NET Framework バージョン 1.0 Service Pack 1 および Service Pack 2 では、インターネット ゾーン コード グループは Nothing アクセス許可セットを受け取ります。 .NET Framework の他のすべてのリリースでは、インターネット ゾーン コード グループはインターネットアクセス許可セットを受け取ります。

これらの各アクセス許可セットで付与される既定のアクセス許可は、「既定のセキュリティ ポリシー」トピックに記載されています。 アプリケーションが受け取るアクセス許可に応じて、正しく実行されるか、セキュリティ例外が生成されます。

多くの Windows フォーム アプリケーションは、ClickOnce を使用して配置されます。 ClickOnce 配置の生成に使用されるツールのセキュリティの既定値は、前に説明したツールとは異なります。 詳細については、次の説明を参照してください。

セキュリティ ポリシーは変更できるため、アプリケーションに付与される実際のアクセス許可は既定値とは異なる場合があります。つまり、アプリケーションは 1 台のコンピューターでアクセス許可を持つことができますが、別のコンピューターではアクセス許可を持つ必要はありません。

より安全な Windows フォーム アプリケーションの開発

セキュリティは、アプリケーション開発のすべての手順で重要です。 まず、セキュリティで保護されたコーディングガイドラインを確認し、従うことから始めます。

次に、アプリケーションを完全信頼で実行する必要があるかどうか、または部分信頼で実行する必要があるかどうかを決定します。 アプリケーションを完全に信頼して実行すると、ローカル コンピューター上のリソースに簡単にアクセスできるようになりますが、セキュリティで保護されたコーディング ガイドラインのトピックに厳密に従ってアプリケーションを設計および開発しないと、アプリケーションとそのユーザーは高いセキュリティ リスクにさらされます。 部分信頼でアプリケーションを実行すると、より安全なアプリケーションの開発が容易になり、リスクが大幅に軽減されますが、特定の機能を実装する方法についてより多くの計画が必要になります。

部分信頼 (つまり、インターネットまたはローカル イントラネットのアクセス許可セット) を選択した場合は、この環境でのアプリケーションの動作を決定します。 Windows フォームには、準信頼環境で機能を実装するための、より安全な代替手段が用意されています。 アプリケーションの特定の部分 (データ アクセスなど) は、部分信頼環境と完全信頼環境の両方で異なる方法で設計および記述できます。 アプリケーション設定などの一部の Windows フォーム機能は、部分信頼で動作するように設計されています。 詳細については、「アプリケーション設定の概要」を参照してください。

アプリケーションで、部分信頼で許可されているよりも多くのアクセス許可が必要であっても、完全な信頼で実行したくない場合は、必要な追加のアクセス許可のみをアサートしながら部分信頼で実行できます。 たとえば、部分信頼で実行するが、アプリケーションにユーザーのファイル システム上のディレクトリへの読み取り専用アクセス権を付与する必要がある場合は、そのディレクトリに対してのみ FileIOPermission を要求できます。 この方法を正しく使用すると、アプリケーションの機能が向上し、ユーザーのセキュリティ リスクを最小限に抑えることができます。

部分信頼で実行されるアプリケーションを開発するときは、アプリケーションで実行する必要があるアクセス許可と、必要に応じてアプリケーションで使用できるアクセス許可を追跡します。 すべてのアクセス許可がわかったら、アプリケーション レベルでアクセス許可の宣言要求を行う必要があります。 アクセス許可を要求すると、アプリケーションに必要なアクセス許可と、特に必要としないアクセス許可が .NET Framework の実行時に通知されます。 詳細については、「アクセス許可の要求」を参照してください。

オプションのアクセス許可を要求する場合は、アプリケーションに付与されていないアクセス許可を必要とするアクションを実行した場合に生成されるセキュリティ例外を処理する必要があります。 SecurityException を適切に処理することで、アプリケーションが引き続き動作できるようになります。 アプリケーションでは、例外を使用して、ユーザーに対して機能を無効にする必要があるかどうかを判断できます。 たとえば、アプリケーションでは、必要なファイルアクセス許可が付与されていない場合、保存 メニュー オプションを無効にすることができます。

場合によっては、すべての適切なアクセス許可をアサートしたかどうかを把握するのが難しい場合があります。 たとえば、画面上で無害に見えるメソッド呼び出しは、実行中のある時点でファイル システムにアクセスする可能性があります。 必要なすべてのアクセス許可を持つアプリケーションをデプロイしない場合は、デスクトップでデバッグするときに正常にテストされますが、デプロイすると失敗することがあります。 .NET Framework 2.0 SDK と Visual Studio 2005 には、アプリケーションに必要なアクセス許可を計算するためのツール (MT.exe コマンド ライン ツールと Visual Studio のアクセス許可の計算機能) が含まれています。

次のトピックでは、Windows フォームの追加のセキュリティ機能について説明します。

トピック 説明
Windows フォーム でのファイルおよびデータ アクセスのセキュリティを強化する 部分信頼環境のファイルとデータにアクセスする方法について説明します。
Windows フォーム での印刷の安全性を高める 部分信頼環境で印刷機能にアクセスする方法について説明します。
Windows フォームでの追加のセキュリティ考慮事項 - ウィンドウ操作の実行、クリップボードの使用、部分信頼環境でのアンマネージ コードの呼び出しについて説明します。

適切なアクセス許可を持つアプリケーションのデプロイ

Windows フォーム アプリケーションをクライアント コンピューターに配置する最も一般的な方法は、アプリケーションで実行する必要があるすべてのコンポーネントを記述する配置テクノロジである ClickOnce です。 ClickOnce では、マニフェストと呼ばれる XML ファイルを使用して、アプリケーションを構成するアセンブリとファイル、およびアプリケーションに必要なアクセス許可も記述します。

ClickOnce には、クライアント コンピューターに対する昇格されたアクセス許可を要求するための 2 つのテクノロジがあります。 どちらのテクノロジも Authenticode 証明書の使用に依存しています。 証明書は、アプリケーションが信頼できるソースから取得されたことをユーザーに保証するのに役立ちます。

次の表では、これらのテクノロジについて説明します。

高権限許可技術 説明
アクセス許可の昇格 アプリケーションを初めて実行する際に、ユーザーにセキュリティ ダイアログ ボックスを表示します。 [アクセス許可昇格] ダイアログ ボックスには、アプリケーションを発行したユーザーが通知されるため、ユーザーは、追加の信頼を付与するかどうかに関する情報に基づいた決定を行うことができます。
信頼されたアプリケーションの展開 システム管理者が、クライアント コンピューターに発行元の Authenticode 証明書を 1 回限りインストールする必要があります。 その時点から、証明書で署名されたすべてのアプリケーションは信頼済みと見なされ、追加のプロンプトを表示することなく、ローカル コンピューター上で完全に信頼された状態で実行できます。

どのテクノロジを選択するかは、デプロイ環境によって異なります。 詳細については、「ClickOnce 配置戦略の選択」を参照してください。

既定では、Visual Studio または .NET Framework SDK ツール (Mage.exe および MageUI.exe) を使用して配置された ClickOnce アプリケーションは、完全信頼を持つクライアント コンピューターで実行するように構成されます。 部分信頼を使用するか、追加のアクセス許可のみを使用してアプリケーションをデプロイする場合は、この既定値を変更する必要があります。 これは、デプロイを構成するときに Visual Studio または .NET Framework SDK ツール MageUI.exe で行うことができます。 MageUI.exeの使用方法の詳細については、「チュートリアル: ClickOnce アプリケーションを手動で配置する」を参照してください。 また、「方法: ClickOnce アプリケーション のカスタム 権限を設定する」または「方法: ClickOnce アプリケーションのカスタム 権限を設定する」を参照してください。

ClickOnce とアクセス許可の昇格のセキュリティ面の詳細については、「ClickOnce アプリケーションのセキュリティ保護」を参照してください。 信頼されたアプリケーションの展開の詳細については、「信頼されたアプリケーションの展開の概要 を参照してください。

アプリケーションのテスト

Visual Studio を使用して Windows フォーム アプリケーションを展開した場合は、部分的な信頼または開発環境からの制限付きアクセス許可セットでデバッグを有効にすることができます。 方法: アクセス許可が制限された ClickOnce アプリケーションをデバッグするも参照してください。

こちらも参照ください