次の方法で共有


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

重要

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

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

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

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

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

UIPermissionClipboard 値 説明
AllClipboard クリップボードは制限なく使用できます。
OwnClipboard クリップボードは、いくつかの制限付きで使用できます。 クリップボードにデータを配置する機能 (コピーまたは切り取りコマンドの操作) は制限されません。 テキスト ボックスなどの貼り付けを受け入れる組み込みコントロールはクリップボード データを受け入れますが、ユーザー コントロールはプログラムでクリップボードから読み取ることはできません。
NoClipboard クリップボードは使用できません。

既定では、ローカル イントラネット ゾーンは AllClipboard アクセスを受け取り、インターネット ゾーンは OwnClipboard アクセスを受け取ります。 つまり、アプリケーションはクリップボードにデータをコピーできますが、プログラムによってクリップボードに貼り付けたり、クリップボードから読み取ったりすることはできません。 これらの制限により、完全に信頼されていないプログラムが、別のアプリケーションによってクリップボードにコピーされたコンテンツを読み取らないようにします。 アプリケーションで完全なクリップボード アクセスが必要であっても、アクセス許可がない場合は、アプリケーションのアクセス許可を昇格する必要があります。 アクセス許可の昇格の詳細については、「 一般的なセキュリティ ポリシー管理」を参照してください。

ウィンドウ操作

UIPermission クラスは、ウィンドウ操作やその他の UI 関連のアクションを実行するアクセス許可も制御し、関連付けられているUIPermissionWindow列挙値はアクセスのレベルを示します。 次の表に、使用できるアクセス許可レベルを示します。

既定では、ローカル イントラネット ゾーンは AllWindows アクセスを受け取り、インターネット ゾーンは SafeTopLevelWindows アクセスを受け取ります。 つまり、インターネット ゾーンでは、アプリケーションはほとんどのウィンドウ操作と UI アクションを実行できますが、ウィンドウの外観は変更されます。 変更されたウィンドウには、最初の実行時にバルーン通知が表示され、変更されたタイトル バーのテキストが含まれており、タイトル バーに閉じるボタンが必要です。 吹き出し通知とタイトル バーは、アプリケーションが部分的な信頼の下で実行されていることをアプリケーションのユーザーに識別します。

UIPermissionWindow 値 説明
AllWindows ユーザーはすべてのウィンドウとユーザー入力イベントを制限なしで使用できます。
SafeTopLevelWindows ユーザーは、より安全な最上位レベルのウィンドウと安全なサブウィンドウのみを描画に使用でき、それらの最上位のウィンドウとサブウィンドウ内のユーザー インターフェイスにユーザー入力イベントのみを使用できます。 これらの安全なウィンドウには明確なラベルが付き、最小サイズと最大サイズの制限があります。 この制限により、システム ログオン画面やシステム デスクトップの模倣など、有害なスプーフィング攻撃を防ぎ、プログラムによる親ウィンドウへのアクセス、フォーカス関連の API、および ToolTip コントロールの使用を制限します。
SafeSubWindows ユーザーは、図面に安全なサブウィンドウのみを使用でき、そのサブウィンドウ内のユーザー インターフェイスに対してのみユーザー入力イベントを使用できます。 ブラウザー内に表示されるコントロールは、より安全なサブウィンドウの例です。
NoWindows ユーザーは、ウィンドウまたはユーザー インターフェイス イベントを使用できません。 ユーザー インターフェイスは使用できません。

UIPermissionWindow列挙によって識別される各アクセス許可レベルでは、その上のレベルよりも少ないアクションが許可されます。 次の表は、 SafeTopLevelWindows 値と SafeSubWindows 値によって制限されるアクションを示しています。 各メンバーに必要な正確なアクセス許可については、.NET Framework クラス ライブラリのドキュメントでそのメンバーのリファレンスを参照してください。

SafeTopLevelWindows アクセス許可は、次の表に示すアクションを制限します。

コンポーネント 禁止されたアクション
Application - SafeTopLevelCaptionFormat プロパティを設定します。
Control - Parent プロパティを取得します。
- Region プロパティを設定します。
- FindFormFocusFromChildHandleFromHandlePreProcessMessageReflectMessage、または SetTopLevel メソッドを呼び出します。
- 返されたコントロールが呼び出し元のコントロールの子でない場合は、 GetChildAtPoint メソッドを呼び出します。
- コンテナー コントロール内のコントロール フォーカスを変更します。
Cursor - Clip プロパティを設定します。
- Hide メソッドを呼び出します。
DataGrid - ProcessTabKey メソッドを呼び出します。
Form - ActiveForm または MdiParent プロパティを取得します。
- ControlBoxShowInTaskbar、または TopMost プロパティを設定します。
- Opacity プロパティを 50%未満に設定します。
- WindowState プロパティをプログラムで Minimized するように設定します。
- Activate メソッドを呼び出します。
- NoneFixedToolWindow、および SizableToolWindowFormBorderStyle 列挙値を使用します。
NotifyIcon - NotifyIcon コンポーネントの使用は完全に制限されています。

SafeSubWindows値は、SafeTopLevelWindows値によって設定される制限に加えて、次の表に示すアクションを制限します。

コンポーネント 禁止されたアクション
CommonDialog - CommonDialog クラスから派生したダイアログ ボックスを表示します。
Control - CreateGraphics メソッドを呼び出します。
- Cursor プロパティを設定します。
Cursor - Current プロパティを設定します。
MessageBox - Show メソッドを呼び出します。

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

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

この潜在的なリスクを制限するには、信頼できるベンダーからのみサード パーティのコントロールを使用します。 検証できないソースからダウンロードしたサード パーティ製のコントロールを使用する場合は、ソース コードで潜在的な悪用を確認することをお勧めします。 ソースが悪意のないものであることを確認したら、アセンブリを自分でコンパイルして、ソースがアセンブリと一致することを確認する必要があります。

Windows API 呼び出し

アプリケーション設計で Windows API から関数を呼び出す必要がある場合は、アンマネージド コードにアクセスします。 この場合、Windows API の呼び出しまたは値を操作するときに、ウィンドウまたはオペレーティング システムに対するコードのアクションを特定できません。 SecurityPermission クラスとUnmanagedCode列挙のSecurityPermissionFlag値は、アンマネージ コードへのアクセスを制御します。 アプリケーションは、 UnmanagedCode アクセス許可が付与されている場合にのみ、アンマネージ コードにアクセスできます。 既定では、ローカルで実行されているアプリケーションのみがアンマネージ コードを呼び出すことができます。

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

コンポーネント メンバー
Application - AddMessageFilter 方式
- CurrentInputLanguage 財産
- Exit 方式
- ExitThread 方式
- ThreadException 出来事
CommonDialog - HookProc 方式
- OwnerWndProc\方式
- Reset 方式
- RunDialog 方式
Control - CreateParams 方式
- DefWndProc 方式
- DestroyHandle 方式
- WndProc 方式
Help - ShowHelp メソッド
- ShowHelpIndex 方式
NativeWindow - NativeWindow クラス
Screen - FromHandle 方式
SendKeys - Send 方式
- SendWait 方式

アプリケーションにアンマネージ コードを呼び出すアクセス許可がない場合は、アプリケーションUnmanagedCodeアクセス許可を要求するか、機能を実装する別の方法を検討する必要があります。多くの場合、Windows フォームは Windows API 関数の代わりにマネージドな代替手段を提供します。 代替手段が存在せず、アプリケーションがアンマネージ コードにアクセスする必要がある場合は、アプリケーションのアクセス許可を昇格する必要があります。

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

こちらも参照ください