Windows フォームのセキュリティに関するその他の考慮事項

更新 : 2007 年 11 月

.NET Framework セキュリティ設定によっては、ローカル コンピュータとは異なり、アプリケーションが部分信頼環境で実行されることがあります。.NET Framework は、ファイル システム、ネットワーク、アンマネージ API などの重要なローカル リソースへのアクセスを他のリソースの場合よりも制限します。セキュリティ設定により、セキュリティ システムが検証できない Microsoft Win32 API やその他の API を呼び出す機能が影響を受けます。また、ファイルやデータへのアクセス、印刷など、アプリケーションのその他の処理にも影響があります。部分信頼環境でのファイルやデータへのアクセスの詳細については、「Windows フォームにおけるファイルおよびデータへのより安全なアクセス」を参照してください。部分信頼環境での印刷の詳細については、「Windows フォームでのより安全な印刷」を参照してください。

以下のセクションでは、クリップボードの使用、ウィンドウ操作の実行、および部分信頼環境で動作しているアプリケーションからの Win32 API の呼び出しについて説明しています。

クリップボードへのアクセス

UIPermission クラスがクリップボードへのアクセスを制御し、関連付けられた UIPermissionClipboard 列挙値がアクセスのレベルを示します。使用されるアクセス許可レベルを次の表に示します。

UIPermissionClipboard の値

説明

AllClipboard

クリップボードは制限なしに使用できます。

OwnClipboard

クリップボードは制限付きで使用できます。クリップボードにデータを格納する機能 ([コピー] または [切り取り] のコマンド操作) は制限されません。テキスト ボックスなど、[貼り付け] を受け入れる固有のコントロールは、クリップボードのデータを受け入れます。しかし、ユーザー コントロールはプログラムでクリップボードからデータを読み取ることができません。

NoClipboard

クリップボードは使用できません。

既定では、[イントラネット] ゾーンでは AllClipboard アクセスが許可され、[インターネット] ゾーンでは OwnClipboard アクセスが許可されます。つまり、アプリケーションはクリップボードにデータをコピーできますが、プログラムでクリップボードに貼り付けたりクリップボードから読み取ったりはできません。これらの制限により、完全に信頼されていないプログラムは、他のアプリケーションによってクリップボードにコピーされた内容を読み取ることができません。アプリケーションがクリップボードへの完全なアクセスを必要とするにもかかわらず、アクセス許可がない場合は、アプリケーションに対するアクセス許可の度合いを高める必要があります。アクセス許可を増やす方法の詳細については、「コード アクセス セキュリティと ADO.NET」を参照してください。

ウィンドウ操作

UIPermission クラスは、ウィンドウ操作や他の UI 関連処理を実行するアクセス許可も管理し、関連付けられた UIPermissionWindow 列挙値がアクセスのレベルを示します。使用されるアクセス許可レベルを次の表に示します。

既定では、[イントラネット] ゾーンでは AllWindows アクセスが許可され、[インターネット] ゾーンでは SafeTopLevelWindows アクセスが許可されます。つまり、[インターネット] ゾーンでは、アプリケーションがほとんどのウィンドウ操作および UI 関連処理を実行できますが、ウィンドウの外観が変更されます。変更されたウィンドウには、最初の実行時にバルーン通知が表示され、変更されたタイトル バー テキストが表示され、タイトル バーに閉じるボタンが必要になります。バルーン通知とタイトル バーは、アプリケーションのユーザーに、アプリケーションが部分信頼で動作していることを示します。

UIPermissionWindow の値

説明

AllWindows

ユーザーはすべてのウィンドウとユーザー入力イベントを制限なしに使用できます。

SafeTopLevelWindows

ユーザーは、セーフ トップレベル ウィンドウとセーフ サブウィンドウだけを描画に使用でき、それらのセーフ トップレベル ウィンドウとセーフ サブウィンドウの中のユーザー インターフェイスに対するユーザー入力イベントだけを使用できます。これらのセーフ ウィンドウには明確なラベルが付けられ、最小サイズと最大サイズに制限があります。これらの制限により、システム ログオン画面やシステム デスクトップの偽装など、有害の可能性がある、なりすまし攻撃が防止されます。また、親ウィンドウ、フォーカス関連の API、および ToolTip コントロールの使用に対して、プログラムによるアクセスが制限されます。

SafeSubWindows

ユーザーは、セーフ サブウィンドウだけを描画に使用でき、そのセーフ サブウィンドウの中のユーザー インターフェイスに対するユーザー入力イベントだけを使用できます。ブラウザ内に表示されるコントロールは、セーフ サブウィンドウの一例です。

NoWindows

ユーザーは、ウィンドウおよびユーザー インターフェイス イベントを使用できません。ユーザー インターフェイスは使用できません。

UIPermissionWindow 列挙値によって示される各アクセス許可レベルでは、レベルが下がるにつれて許可される処理が少なくなります。SafeTopLevelWindowsSafeSubWindows の値によって制限される処理を次の表に示します。各メンバに対して必要なアクセス許可については、.NET Framework クラス ライブラリのドキュメントで該当するメンバのトピックを参照してください。

SafeTopLevelWindows アクセス許可は、次の表に示される処理を制限します。

コンポーネント

制限される処理

Application

Control

Cursor

  • Clip プロパティの設定

  • Hide メソッドの呼び出し

DataGrid

Form

NotifyIcon

  • NotifyIcon コンポーネントの使用は完全に制限されます。

SafeSubWindows の値は、SafeTopLevelWindows の値による制限に加えて、次の表に示される処理を制限します。

コンポーネント

制限される処理

CommonDialog

  • CommonDialog クラスから派生したダイアログ ボックスの表示

Control

Cursor

MessageBox

  • Show メソッドの呼び出し

サードパーティ コントロールのホスト

フォームでサードパーティ コントロールをホストしている場合、他の種類のウィンドウ操作が発生する可能性があります。サードパーティ コントロールとは、自分で開発およびコンパイルを行っていないカスタムの UserControl です。ホスト シナリオを攻略するのは困難ですが、理論上、サードパーティ コントロールが描画サーフェイスを拡張して、フォームの領域全体を対象にする可能性があります。このようなコントロールは、重要なダイアログ ボックスを模倣し、ユーザーのユーザー名/パスワードの組み合わせや銀行口座番号などの情報を要求する可能性があります。

このような考えられるリスクを制限するために、信頼できる販売元のサードパーティ コントロールのみを使用します。確認できないソースからサードパーティ コントロールをダウンロードした場合、攻略行為が実行されないかソース コードを確認します。ソースに悪意がないことを検証してから、アセンブリを自分でコンパイルし、ソースがアセンブリと一致することを確認します。

Win32 API 呼び出し

アプリケーションのデザインで Win32 API から関数を呼び出す必要がある場合は、アンマネージ コードにアクセスします。この場合、Win32 API の呼び出しまたは値を使用するときに、ウィンドウまたはオペレーティング システムに対するコードの動作が決定できません。SecurityPermission クラスと、SecurityPermissionFlag 列挙定数の UnmanagedCode 値によって、アンマネージ コードへのアクセスを制御します。アプリケーションは、UnmanagedCode アクセス許可が与えられている場合にだけ、アンマネージ コードにアクセスできます。既定では、ローカルに動作しているアプリケーションだけがアンマネージ コードを呼び出すことができます。

Windows フォームのいくつかのメンバが、UnmanagedCode アクセス許可を必要とするアンマネージ アクセスを提供します。アクセス許可を必要とする System.Windows.Forms 名前空間のメンバを次の表に示します。メンバに対して必要なアクセス許可の詳細については、.NET Framework クラス ライブラリのドキュメントを参照してください。

コンポーネント

メンバ

Application

CommonDialog

Control

Help

NativeWindow

Screen

SendKeys

アプリケーションがアンマネージ コードを呼び出すアクセス許可を持っていない場合、UnmanagedCode アクセス許可を要求するか、別の方法で機能を実装することを考慮する必要があります。多くの場合、Windows フォームでは代わりに Win32 API 関数のマネージ コードを提供します。代わりの手段がなく、アプリケーションがアンマネージ コードにアクセスする必要がある場合は、アプリケーションに対するアクセス許可を増やす必要があります。

アンマネージ コードを呼び出すアクセス許可を与えられたアプリケーションは、ほとんど何でも実行できます。そのため、アンマネージ コードを呼び出すアクセス許可は、信頼されたソースからのアプリケーションに対してだけ与えるようにしてください。また、アプリケーションによっては、アンマネージ コードへの呼び出しを生成するアプリケーション機能の一部をオプションにするか、完全信頼環境でのみ有効にすることもできます。危険なアクセス許可の詳細については、「危険なアクセス許可とポリシー管理」を参照してください。アクセス許可の昇格の詳細については、「一般的なセキュリティ ポリシー管理」を参照してください。

参照

概念

Windows フォームにおけるファイルおよびデータへのより安全なアクセス

Windows フォームでのより安全な印刷

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

ClickOnce の配置とセキュリティ

その他の技術情報

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