Windows Presentation Foundation 部分信頼セキュリティ

更新 : 2008 年 7 月

一般に、悪質な被害を防止するため、インターネット アプリケーションによる重要なシステム リソースへの直接アクセスは制限する必要があります。既定では、HTML およびクライアント側のスクリプト言語は、重要なシステム リソースにはアクセスできません。Windows Presentation Foundation (WPF) ブラウザ ホスト アプリケーションは、ブラウザから起動できるため、同様に、一連の制限に従う必要があります。この制限を適用するために、WPF は コード アクセス セキュリティ (CAS) と ClickOnce の両方に依存します (「Windows Presentation Foundation のセキュリティ方針 - プラットフォーム セキュリティ」を参照)。既定では、ブラウザ ホスト アプリケーションは、インターネット、ローカル イントラネット、ローカル マシンのどこから起動されたかに関係なく、インターネット ゾーン CAS のアクセス許可セットを要求します。無制限ではないアクセス許可の元で実行するアプリケーションは、部分信頼で実行しているものと見なされます。

WPF は、さまざまなサポートを提供し、最大限の機能を部分信頼で安全に使用できることを実現します。また、CAS と共に、部分信頼のプログラミングへの追加サポートを提供します。

このトピックには次のセクションが含まれています。

  • WPF 機能の部分信頼サポート
  • 部分信頼のプログラミング
  • アクセス許可の管理
  • 関連トピック

WPF 機能の部分信頼サポート

次の表は、インターネット ゾーン アクセス許可セットの制限内で、安全に使用できる Windows Presentation Foundation (WPF) の高レベル機能の一覧です。

表 1 : 部分信頼で安全な WPF 機能

機能エリア

機能

全般

ブラウザ ウィンドウ

起点サイト アクセス

IsolatedStorage (512 KB 制限)

UIAutomation プロバイダ

コマンド実行

入力方式エディタ (IME)

タブレット スタイラスとインク

マウス キャプチャと移動イベントを使用してシミュレートされたドラッグ/ドロップ

OpenFileDialog

XAML 逆シリアル化 (XamlReader.Load 経由)

Web 統合

ブラウザ ダウンロード ダイアログ

トップレベル ユーザーが実行するナビゲーション

mailto: リンク

Uniform Resource Identifier パラメータ

HTTPWebRequest

IFRAME でホストされた WPF コンテンツ

フレームを使用した同一サイトの HTML ページのホスト

WebBrowser を使用した同一サイトの HTML ページのホスト

Web サービス (ASMX)

Web サービス (Windows Communication Foundation を使用)

ビジュアル

2D と 3D

アニメーション

メディア (起点サイトおよびドメイン間)

イメージング/オーディオ/ビデオ

読み取り

FlowDocument

XPS ドキュメント

埋め込みフォントとシステム フォント

CFF フォントと TrueType フォント

編集

スペル チェック

RichTextBox

プレーンテキストおよびインク クリップボード サポート

ユーザーが実行する貼り付け

選択した内容のコピー

コントロール

コントロール全般

この表は、高レベルの WPF 機能を示しています。詳細情報に関して Windows ソフトウェア開発キット (SDK) では、WPF の各メンバが必要とするアクセス許可について文書化しています。また、以下の機能については、特別な考慮事項など、部分信頼での実行に関するさらに詳細な情報があります。

次の表は、インターネット ゾーン アクセス許可セットの制限内では、安全に実行できない WPF 機能の一覧です。

表 2 : 部分信頼で安全でない WPF 機能

機能エリア

機能

全般

ウィンドウ (アプリケーションで定義したウィンドウおよびダイアログ ボックス)

SaveFileDialog

ファイル システム

レジストリへのアクセス

ドラッグ アンド ドロップ

XAML シリアル化 (XamlWriter.Save 経由)

UIAutomation クライアント

ソース ウィンドウ アクセス (HwndHost)

完全な音声サポート

Windows フォームの相互運用性

Web 統合

スクリプト

ドキュメント オブジェクト モデル

ビジュアル

ビットマップ効果

イメージ エンコード

編集

リッチ テキスト形式のクリップボード

完全な XAML サポート

部分信頼のプログラミング

XBAP アプリケーションでは、コードが既定のインターネット ゾーン アクセス許可セットを越える場合、CAS によって検出され、セキュリティ例外が発生し、そのアプリケーションは終了します。これはユーザーを保護しますが、最善のユーザー エクスペリエンスを提供するものではありません。

一般に、設定されているアクセス許可を超える可能性のあるコードは、スタンドアロン アプリケーションとブラウザ ホスト アプリケーションの間で共有される通常のコードと考えられます。CAS と WPF には、このシナリオを処理するためのいくつかの手法が用意されています。

CAS を使用したアクセス許可の検出

状況によっては、ライブラリ アセンブリで共有されるコードを、スタンドアロン アプリケーションと XBAP の両方で使用することができます。この場合、コードは、アプリケーションに付与されているアクセス許可セットの制限よりも高い許可を要求する機能を実行する可能性があります。アプリケーションは、Microsoft .NET Framework セキュリティを使用して、特定のアクセス許可を得ているかどうかを検出できます。特に、必要なアクセス許可のインスタンスで Demand メソッドを呼び出して、特定のアクセス許可を持っているかどうかをテストすることができます。これを次の例に示します。このコードでは、ローカル ディスクにファイルを保存できるかどうかを照会します。

アプリケーションに必要なアクセス許可がない場合、Demand の呼び出しによって、セキュリティ例外がスローされます。それ以外の場合は、アクセス許可が付与されます。IsPermissionGranted は、この動作をカプセル化し、必要に応じて true または false を返します。

機能の正常な低下

コードに必要なアクセス許可があるかどうかを検出できることは、別のゾーンから実行できるコードにとって重要です。ゾーンが 1 つであることを検出している間に、可能であれば、ユーザーに代替手段を提供する方がより望ましいでしょう。たとえば、完全信頼アプリケーションを使用すると、通常、ユーザーは任意の場所にファイルを作成できますが、部分信頼アプリケーションでは、ファイルを作成できるのは分離ストレージだけです。ファイルを作成するコードが、完全信頼アプリケーション (スタンドアロン アプリケーション) と部分信頼アプリケーション (ブラウザ ホスト アプリケーション) とで共有されるアセンブリ (.dll) 内にある場合、ユーザーが両方のアプリケーションでファイルを作成できるようにするには、適切な場所にファイルを作成する前に、この共有されるコードが、部分信頼で実行されているのか完全信頼で実行されているのかを検出する必要があります。次のコードで両方の例を示します。

多くの場合、部分信頼の代替を見つける必要があります。

イントラネットなどの制御された環境では、カスタム マネージ フレームワークを、クライアント ベース全体にわたって、グローバル アセンブリ キャッシュ (GAC) にインストールすることができます。このライブラリは、完全信頼を必要とするコードを実行することができ、AllowPartiallyTrustedCallersAttribute を使用することで、部分信頼だけを付与されているアプリケーションからも参照できます (詳細については、「Windows Presentation Foundation のセキュリティ」および「Windows Presentation Foundation のセキュリティ方針 - プラットフォーム セキュリティ」を参照してください)。

ブラウザ ホストの検出

CAS を使用したアクセス許可の確認は、アクセス許可ごとの確認が必要な場合に適した手法です。ただし、この手法は、通常の処理の一部として例外をキャッチすることに依存し、一般には推奨されません。また、パフォーマンスの問題を抱える可能性があります。代わりに、XAML ブラウザ アプリケーション (XBAP) がインターネット ゾーンのサンドボックス内でのみ実行される場合、BrowserInteropHelper.IsBrowserHosted を使用することができ、これは XAML ブラウザ アプリケーション (XBAP) に true を返します。

ブラウザでホストされているかどうかの検出のサンプル を参照してください。

メモ :

IsBrowserHosted は、アプリケーションがブラウザで実行されているかどうかを区別するだけで、実行中のアプリケーションに付与されているアクセス許可セットについての区別はしません。

アクセス許可の管理

既定では、XBAP は、部分信頼 (既定のインターネット ゾーン アクセス許可セット) で実行されます。ただし、アプリケーションの要求に応じて、アクセス許可セットを既定から変更することができます。たとえば、XBAP がローカル イントラネットから起動される場合、より高いアクセス許可セットを利用できます。これを、次の表に示します。

表 3 : ローカル イントラネットのアクセス許可とインターネットのアクセス許可

アクセス許可

属性

LocalIntranet

インターネット

DNS

アクセス DNS サーバー

×

環境変数

読み取り

×

ファイル ダイアログ

開く

ファイル ダイアログ

制限なし

×

分離ストレージ

ユーザーによるアセンブリの分離

×

分離ストレージ

不明な分離

分離ストレージ

無制限のユーザー クォータ

×

メディア

安全なオーディオ、ビデオ、イメージ

印刷

既定の印刷

×

印刷

安全な印刷

リフレクション

出力

×

セキュリティ

マネージ コードの実行

セキュリティ

付与されたアクセス許可の Assert

×

ユーザー インターフェイス

制限なし

×

ユーザー インターフェイス

安全なトップレベル ウィンドウ

ユーザー インターフェイス

独自のクリップボード

Web ブラウザ

HTML への安全なフレーム ナビゲーション

より高いアクセス許可が必要な場合、次のツールを使用できます。

XBAP が完全信頼を必要とする場合、同じツールを使用して要求されたアクセス許可を強化できますが、XBAP は、ローカル マシン上にインストールされ、ローカル マシンから起動される場合にのみ、完全信頼を受け取ります。これは、XBAP を Web サーバーに公開する場合に取得される自動更新のサポートが維持されないことを意味します。

参照

概念

Windows Presentation Foundation のセキュリティ

Windows Presentation Foundation のセキュリティ方針 - プラットフォーム セキュリティ

Windows Presentation Foundation のセキュリティ方針 - セキュリティ エンジニアリング

履歴の変更

日付

履歴

理由

2008 年 7 月

新しい WebBrowser コントロールの記述を追加。

SP1 機能変更