次の方法で共有


セキュリティ (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) スタンドアロンおよびブラウザーでホストされるアプリケーションのセキュリティ モデルについて説明します。

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

安全なナビゲーション

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 要素をクリックして移動します。

  • ゾーン. 移動するコンテンツは、インターネットまたはローカル イントラネットにあります。

  • プロトコル。 使用されているプロトコルは、httphttpsファイル、または mailtoです。

XBAP がこれらの条件に準拠していない方法でコンテンツに移動しようとすると、SecurityException がスローされます。

Web ブラウズ ソフトウェアのセキュリティ設定

コンピューターのセキュリティ設定によって、Web 閲覧ソフトウェアに付与されるアクセス権が決まります。 Web 閲覧ソフトウェアには、WinINet または UrlMon API (Internet Explorer や PresentationHost.exeなど) を使用するアプリケーションまたはコンポーネントが含まれます。

Internet Explorer には、Internet Explorer によって、または Internet Explorer から実行できる機能を構成できるメカニズムが用意されています。これには、次のものが含まれます。

  • .NET Framework に依存するコンポーネント

  • ActiveX コントロールとプラグイン

  • ダウンロード

  • スクリプト

  • ユーザー認証

この方法でセキュリティで保護できる機能のコレクションは、インターネットイントラネット信頼済みサイト、および 制限付きサイト ゾーンに対してゾーンごとに構成されます。 次の手順では、セキュリティ設定を構成する方法について説明します。

  1. コントロール パネルを開きます。

  2. [ネットワークとインターネット ] をクリックし、[インターネット オプション]クリックします。

    [インターネット オプション] ダイアログ ボックスが表示されます。

  3. [セキュリティ] タブで、セキュリティ設定を構成するゾーンを選択します。

  4. [カスタム レベル] ボタンをクリックします。

    [セキュリティ設定 ] ダイアログ ボックスが表示され、選択したゾーンのセキュリティ設定を構成できます。

    [セキュリティ設定] ダイアログ ボックスを示すスクリーンショット。

手記

Internet Explorer から [インターネット オプション] ダイアログ ボックスにアクセスすることもできます。 [ツール] をクリックし、[インターネット オプション]クリックします。

Windows Internet Explorer 7 以降では、.NET Framework 専用の次のセキュリティ設定が含まれています。

  • Loose XAMLを に関連付けます 。 Internet Explorer が未コンパイルの XAML ファイルに移動できるかどうかを制御します。 ([有効]、[無効]、[プロンプト] のオプション)。

  • XAML ブラウザー アプリケーション Internet Explorer が XBAP に移動して実行できるかどうかを制御します。 ([有効]、[無効]、[プロンプト] のオプション)。

既定では、これらの設定はすべて、インターネットローカル イントラネット、および 信頼済みサイト ゾーンに対して有効になり、制限付きサイト ゾーンでは無効になります。

インターネット オプションで使用できるセキュリティ設定に加えて、次のレジストリ値を使用して、セキュリティに依存する多数の 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 ファイルが生成された場合です。 この種類のコンテンツは、外部コンテンツと呼ばれ、 の両方に移動したときに分離するように構成できます。 分離は、FrameNavigationWindowの次の例に示すように、SandboxExternalContent プロパティを true に設定することで実現されます。

<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 部分信頼セキュリティ

関連項目