セキュリティ (WPF)
Windows Presentation Foundation (WPF) スタンドアロンおよびブラウザーでホストされるアプリケーションを開発する場合は、セキュリティ モデルを検討する必要があります。 WPF スタンドアロン アプリケーションは、Windows インストーラー (.msi)、XCopy、または ClickOnce を使用して展開されるかどうかにかかわらず、無制限のアクセス許可 (CASFullTrust アクセス許可セット) で実行されます。 ClickOnce を使用した部分信頼のスタンドアロン WPF アプリケーションの配置はサポートされていません。 ただし、完全信頼ホスト アプリケーションでは、.NET Framework アドイン モデルを使用して部分信頼 AppDomain を作成できます。 詳細については、「WPF Add-Ins の概要」を参照してください。
WPF ブラウザーでホストされるアプリケーションは、Windows Internet Explorer または Firefox によってホストされ、XAML ブラウザー アプリケーション (XBAP) または loose Extensible Application Markup Language (XAML) ドキュメントを使用できます。詳細については、「WPF XAML ブラウザー アプリケーションの概要
警告
XBAP では、Internet Explorer や古いバージョンの Firefox など、従来のブラウザーが動作する必要があります。 これらの古いブラウザーは、通常、Windows 10 および Windows 11 ではサポートされていません。 最新のブラウザーでは、セキュリティ リスクのために XBAP アプリに必要なテクノロジがサポートされなくなりました。 XBAP を有効にするプラグインはサポートされなくなりました。 詳細については、「WPF ブラウザーでホストされるアプリケーション (XBAP)についてよく寄せられる質問を参照してください。
WPF ブラウザーでホストされるアプリケーションは、部分信頼セキュリティ サンドボックス内で既定で実行されます。これは、既定の CASインターネット ゾーンのアクセス許可セットに制限されます。 これにより、一般的な Web アプリケーションを分離するのと同じ方法で、WPF ブラウザーでホストされるアプリケーションがクライアント コンピューターから効果的に分離されます。 XBAP は、展開 URL のセキュリティ ゾーンとクライアントのセキュリティ構成に応じて、特権を完全信頼まで昇格できます。 詳細については、「WPF 部分信頼セキュリティ」を参照してください。
このトピックでは、Windows Presentation Foundation (WPF) スタンドアロンおよびブラウザーでホストされるアプリケーションのセキュリティ モデルについて説明します。
このトピックには、次のセクションが含まれています。
セキュリティ を促進する WPF アプリケーションを開発するための
リソース
安全なナビゲーション
XBAP の場合、WPF はアプリケーションとブラウザーの 2 種類のナビゲーションを区別します。
アプリケーション ナビゲーション は、ブラウザーによってホストされているアプリケーション内のコンテンツ項目間のナビゲーションです。 ブラウザー ナビゲーション は、ブラウザー自体のコンテンツと場所の URL を変更するナビゲーションです。 アプリケーション ナビゲーション (通常は XAML) とブラウザー ナビゲーション (通常は HTML) の関係を次の図に示します。
XBAP の移動が安全であると見なされるコンテンツの種類は、主にアプリケーション ナビゲーションとブラウザー ナビゲーションのどちらを使用するかによって決まります。
アプリケーション ナビゲーションのセキュリティ
アプリケーション ナビゲーションは、次の 4 種類のコンテンツをサポートするパック URI で識別できる場合、安全であると見なされます。
コンテンツ タイプ | 説明 | URI の例 |
---|---|---|
資源 | プロジェクトのビルドタイプ リソースに追加されるファイル。 | pack://application:,,,/MyResourceFile.xaml |
コンテンツ | ビルドの種類が Contentのプロジェクトに追加されるファイル。 | pack://application:,,,/MyContentFile.xaml |
配信元のサイト | ビルドタイプが [なし]のプロジェクトにファイル |
pack://siteoforigin:,,,/MySiteOfOriginFile.xaml |
アプリケーション コード | コンパイル済みの分離コードを持つ XAML リソース。 -又は- ビルドの種類がであり、ページのプロジェクトに追加されるXAMLファイル。 |
pack://application:,,,/MyResourceFile .xaml |
手記
アプリケーション データ ファイルとパック URI の詳細については、「WPF アプリケーション リソース、コンテンツ、およびデータ ファイルの」を参照してください。
これらのコンテンツ タイプのファイルは、ユーザーまたはプログラムによって移動できます。
ユーザーナビゲーション。 ユーザーは、Hyperlink 要素をクリックして移動します。
プログラムによるナビゲーション です。 アプリケーションは、たとえば、NavigationWindow.Source プロパティを設定することで、ユーザーを含めずに移動します。
ブラウザー ナビゲーションのセキュリティ
ブラウザー ナビゲーションは、次の条件下でのみ安全と見なされます。
ユーザー ナビゲーション. ユーザーは、入れ子になった Frameではなく、メイン NavigationWindow内にある Hyperlink 要素をクリックして移動します。
ゾーン. 移動するコンテンツは、インターネットまたはローカル イントラネットにあります。
プロトコル。 使用されているプロトコルは、http、https、ファイル、または mailtoです。
XBAP がこれらの条件に準拠していない方法でコンテンツに移動しようとすると、SecurityException がスローされます。
Web ブラウズ ソフトウェアのセキュリティ設定
コンピューターのセキュリティ設定によって、Web 閲覧ソフトウェアに付与されるアクセス権が決まります。 Web 閲覧ソフトウェアには、WinINet または UrlMon API (Internet Explorer や PresentationHost.exeなど) を使用するアプリケーションまたはコンポーネントが含まれます。
Internet Explorer には、Internet Explorer によって、または Internet Explorer から実行できる機能を構成できるメカニズムが用意されています。これには、次のものが含まれます。
.NET Framework に依存するコンポーネント
ActiveX コントロールとプラグイン
ダウンロード
スクリプト
ユーザー認証
この方法でセキュリティで保護できる機能のコレクションは、インターネット、イントラネット、信頼済みサイト、および 制限付きサイト ゾーンに対してゾーンごとに構成されます。 次の手順では、セキュリティ設定を構成する方法について説明します。
コントロール パネルを開きます。
[ネットワークとインターネット
] をクリックし、[インターネット オプション] クリックします。 [インターネット オプション] ダイアログ ボックスが表示されます。
[セキュリティ] タブで、セキュリティ設定を構成するゾーンを選択します。
[カスタム レベル] ボタンをクリックします。
[セキュリティ設定
] ダイアログ ボックスが表示され、選択したゾーンのセキュリティ設定を構成できます。
手記
Internet Explorer から [インターネット オプション] ダイアログ ボックスにアクセスすることもできます。 [
Windows Internet Explorer 7 以降では、.NET Framework 専用の次のセキュリティ設定が含まれています。
Loose XAMLを
に関連付けます 。 Internet Explorer が未コンパイルの XAML ファイルに移動できるかどうかを制御します。 ([有効]、[無効]、[プロンプト] のオプション)。 XAML ブラウザー アプリケーション Internet Explorer が XBAP に移動して実行できるかどうかを制御します。 ([有効]、[無効]、[プロンプト] のオプション)。
既定では、これらの設定はすべて、インターネット、ローカル イントラネット、および 信頼済みサイト ゾーンに対して有効になり、制限付きサイト ゾーンでは無効になります。
セキュリティ関連の WPF レジストリ設定
インターネット オプションで使用できるセキュリティ設定に加えて、次のレジストリ値を使用して、セキュリティに依存する多数の WPF 機能を選択的にブロックできます。 値は、次のキーで定義されます。
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\Windows Presentation Foundation\Features
次の表に、設定できる値を示します。
値の名前 | 値の型 | 値データ |
---|---|---|
XBAP拒否 | REG_DWORD | 許可しない場合は 1。許可する場合は 0。 |
LooseXamlDisallow | REG_DWORD | 許可しない場合は 1。許可する場合は 0。 |
Webブラウザの許可を無効にする | REG_DWORD | 許可しない場合は 1。許可する場合は 0。 |
メディアオーディオ禁止 | REG_DWORD | 許可しない場合は 1。許可する場合は 0。 |
メディア画像禁止 | REG_DWORD | 許可しない場合は 1。許可する場合は 0。 |
メディアビデオ禁止 | REG_DWORD | 許可しない場合は 1。許可する場合は 0。 |
スクリプト相互運用禁止 | REG_DWORD | 許可しない場合は 1。許可する場合は 0。 |
WebBrowser コントロールと機能コントロール
WPF WebBrowser コントロールを使用して、Web コンテンツをホストできます。 WPF WebBrowser コントロールは、基になる WebBrowser ActiveX コントロールをラップします。 WPF では、WPF WebBrowser コントロールを使用して信頼されていない Web コンテンツをホストする場合に、アプリケーションをセキュリティで保護するためのサポートがいくつか提供されます。 ただし、一部のセキュリティ機能は、WebBrowser コントロールを使用してアプリケーションによって直接適用される必要があります。 WebBrowser ActiveX コントロールの詳細については、「WebBrowser コントロールの概要とチュートリアル」を参照してください。
手記
このセクションは、WebBrowser を使用して HTML コンテンツに移動するため、Frame コントロールにも適用されます。
WPF WebBrowser コントロールを使用して信頼されていない Web コンテンツをホストする場合、アプリケーションは部分信頼 AppDomain を使用して、悪意のある可能性のある HTML スクリプト コードからアプリケーション コードを分離する必要があります。 これは、InvokeScript メソッドと ObjectForScripting プロパティを使用して、アプリケーションがホストされているスクリプトと対話している場合に特に当てはまります。 詳細については、「WPF Add-Ins の概要」を参照してください。
アプリケーションで WPF WebBrowser コントロールを使用する場合、セキュリティを強化して攻撃を軽減するもう 1 つの方法は、Internet Explorer の機能コントロールを有効にすることです。 機能コントロールは Internet Explorer に追加され、管理者と開発者は、Wpf WebBrowser コントロールがラップする WebBrowser ActiveX コントロールをホストする Internet Explorer およびアプリケーションの機能を構成できます。 機能コントロールは、CoInternetSetFeatureEnabled 関数を使用するか、レジストリの値を変更することによって構成できます。 機能コントロールの詳細については、「機能コントロールの概要」 および「インターネット機能コントロール」を参照してください。
WPF WebBrowser コントロールを使用するスタンドアロン WPF アプリケーションを開発している場合、WPF はアプリケーションに対して次の機能コントロールを自動的に有効にします。
機能制御 |
---|
FEATURE_MIME_HANDLING |
FEATURE_MIME_SNIFFING |
FEATURE_OBJECT_CACHING |
FEATURE_SAFE_BINDTOOBJECT |
機能ウィンドウ制限 |
機能ゾーンの標高 |
ファイルダウンロード制限機能 |
ActiveXインストール制限機能 |
アドオン管理機能 |
HTTPユーザー名とパスワードの無効化機能 |
FEATURE_SECURITYBAND |
FEATURE_UNC_SAVEDFILECHECK |
FEATURE_VALIDATE_NAVIGATE_URL |
FEATURE_DISABLE_TELNET_PROTOCOL |
FEATURE_WEBOC_ポップアップ管理 (ポップアップ管理機能) |
レガシー圧縮機能を無効化する機能 |
FEATURE_SSLUX |
これらの機能コントロールは無条件で有効になっているため、完全信頼アプリケーションによって損なわれる可能性があります。 この場合、特定のアプリケーションとそれがホストしているコンテンツのセキュリティ リスクがない場合は、対応する機能コントロールを無効にすることができます。
機能コントロールは、WebBrowser ActiveX オブジェクトをインスタンス化するプロセスによって適用されます。 そのため、信頼されていないコンテンツに移動できるスタンドアロン アプリケーションを作成する場合は、追加の機能コントロールを有効にすることを真剣に検討する必要があります。
手記
この推奨事項は、MSHTML および SHDOCVW ホスト セキュリティに関する一般的な推奨事項に基づいています。 詳細については、「MSHTML Host Security FAQ: Part I of II and The MSHTML Host Security FAQ: Part II of II」を参照してください。
実行可能ファイルの場合は、レジストリ値を 1 に設定して、次の機能コントロールを有効にすることを検討してください。
機能制御 |
---|
アクティブX再利用検出機能 (FEATURE_ACTIVEX_REPURPOSEDETECTION) |
FEATURE_BLOCK_LMZ_IMG |
FEATURE_BLOCK_LMZ_OBJECT |
FEATURE_BLOCK_LMZ_SCRIPT |
リソースをLMZに制限する機能(FEATURE_RESTRICT_RES_TO_LMZ) |
FEATURE_RESTRICT_ABOUT_PROTOCOL_IE7 |
アプリプロトコル警告ダイアログ表示機能 |
ローカルマシンロックダウン機能 |
FEATURE_FORCE_ADDR_AND_STATUS |
ファイルが見つからないときの制限付きゾーン機能 |
実行可能ファイルの場合は、レジストリ値を 0 に設定して、次の機能コントロールを無効にすることを検討してください。
機能制御 |
---|
FEATURE_ENABLE_SCRIPT_PASTE_URLACTION_IF_PROMPT |
Windows Internet Explorer で WPF WebBrowser コントロールを含む部分信頼 XAML ブラウザー アプリケーション (XBAP) を実行すると、WPF は Internet Explorer プロセスのアドレス空間で WebBrowser ActiveX コントロールをホストします。 WebBrowser ActiveX コントロールは Internet Explorer プロセスでホストされるため、Internet Explorer のすべての機能コントロールも WebBrowser ActiveX コントロールに対して有効になります。
Internet Explorer で実行されている XBAP は、通常のスタンドアロン アプリケーションと比較して追加のセキュリティ レベルを取得します。 この追加のセキュリティは、Internet Explorer、つまり WebBrowser ActiveX コントロールが Windows Vista および Windows 7 で既定で保護モードで実行されるためです。 保護モードの詳細については、「保護モードの Internet Explorerでの理解と作業」を参照してください。
手記
インターネット ゾーンで Firefox を使用して WPF WebBrowser コントロールを含む XBAP を実行しようとすると、SecurityException が発生します。 これは、WPF セキュリティ ポリシーが原因です。
部分的に信頼されたクライアント アプリケーションに対する APTCA アセンブリの無効化
マネージド アセンブリがグローバル アセンブリ キャッシュ (GAC) にインストールされると、ユーザーが明示的なアクセス許可を付与してインストールする必要があるため、完全に信頼されます。 完全に信頼されているため、完全に信頼されたマネージド クライアント アプリケーションのみがそれらを使用できます。 部分信頼アプリケーションがそれらを使用できるようにするには、AllowPartiallyTrustedCallersAttribute (APTCA) でマークする必要があります。 部分信頼で安全に実行できるようにテストされたアセンブリのみを、この属性でマークする必要があります。
ただし、APTCA アセンブリを GAC にインストールした後にセキュリティ上の欠陥を示す可能性があります。 セキュリティ上の欠陥が検出されると、アセンブリパブリッシャーはセキュリティ更新プログラムを生成して、既存のインストールの問題を解決し、問題が検出された後に発生する可能性のあるインストールから保護することができます。 更新プログラムの 1 つのオプションはアセンブリをアンインストールすることですが、アセンブリを使用する他の完全に信頼されたクライアント アプリケーションが壊れる可能性があります。
WPF には、APTCA アセンブリをアンインストールせずに部分的に信頼された XBAP に対して APTCA アセンブリを無効にできるメカニズムが用意されています。
APTCA アセンブリを無効にするには、特別なレジストリ キーを作成する必要があります。
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\policy\APTCA\<AssemblyFullName>, FileVersion=<AssemblyFileVersion>
次に例を示します。
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\policy\APTCA\aptcagac, Version=1.0.0.0, Culture=neutral, PublicKeyToken=215e3ac809a0fea7, FileVersion=1.0.0.0
このキーは、APTCA アセンブリのエントリを確立します。 また、アセンブリを有効または無効にする値をこのキーに作成する必要があります。 値の詳細を次に示します。
値の名前: APTCA_FLAG.
値の種類: REG_DWORD.
値データ: 無効にするには、1; 有効にするには、0。
部分的に信頼されたクライアント アプリケーションに対してアセンブリを無効にする必要がある場合は、レジストリ キーと値を作成する更新プログラムを記述できます。
手記
コア .NET Framework アセンブリは、マネージド アプリケーションを実行するために必要であるため、この方法で無効にしても影響を受けません。 APTCA アセンブリの無効化のサポートは、主にサード パーティ製アプリケーションを対象とします。
Loose XAML ファイルのサンドボックス動作
Loose XAML ファイルは、コードビハインド、イベント ハンドラー、またはアプリケーション固有のアセンブリに依存しないマークアップ専用の XAML ファイルです。 ルーズ XAML ファイルがブラウザーから直接移動されると、既定のインターネット ゾーンのアクセス許可セットに基づいてセキュリティ サンドボックスに読み込まれます。
ただし、スタンドアロン アプリケーションの NavigationWindow または Frame から緩やかな XAML ファイルに移動する場合、セキュリティの動作は異なります。
どちらの場合も、移動するルーズ XAML ファイルは、そのホスト アプリケーションのアクセス許可を継承します。 ただし、この動作は、セキュリティの観点から望ましくない可能性があります。特に、信頼されていないエンティティまたは不明なエンティティによって緩い XAML ファイルが生成された場合です。 この種類のコンテンツは、外部コンテンツ
<Frame
Source="ExternalContentPage.xaml"
SandboxExternalContent="True">
</Frame>
<!-- Sandboxing external content using NavigationWindow-->
<NavigationWindow
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
Source="ExternalContentPage.xaml"
SandboxExternalContent="True">
</NavigationWindow>
この設定では、外部コンテンツは、アプリケーションをホストしているプロセスとは別のプロセスに読み込まれます。 このプロセスは、既定のインターネット ゾーンアクセス許可セットに制限され、ホスティング アプリケーションとクライアント コンピューターから効果的に分離されます。
手記
スタンドアロン アプリケーションの NavigationWindow または Frame からの緩やかな XAML ファイルへのナビゲーションは、PresentationHost プロセスを含む WPF ブラウザー ホスティング インフラストラクチャに基づいて実装されますが、セキュリティ レベルは、コンテンツが Windows Vista および Windows 7 上の Internet Explorer に直接読み込まれる場合 (PresentationHost を介した場合) よりも若干低くなります。 これは、Web ブラウザーを使用するスタンドアロン WPF アプリケーションでは、Internet Explorer の追加の保護モード セキュリティ機能が提供されないためです。
セキュリティを促進する WPF アプリケーションを開発するためのリソース
セキュリティを強化する WPF アプリケーションの開発に役立つその他のリソースを次に示します。
面積 | 資源 |
---|---|
マネージド コード | アプリケーション の |
CAS | コードアクセスセキュリティ |
ClickOnce | ClickOnce セキュリティと展開 |
WPF | WPF 部分信頼セキュリティ |
関連項目
- WPF 部分信頼セキュリティ
- WPF セキュリティ戦略 - プラットフォーム セキュリティ
- WPF セキュリティ戦略 - セキュリティ エンジニアリング
- アプリケーション の
パターンとプラクティスのセキュリティ ガイダンス - コード アクセス セキュリティ
- ClickOnce のセキュリティと展開
- WPF 内での XAML
.NET Desktop feedback