WPF 部分信頼セキュリティWPF Partial Trust Security

一般に、悪意のある破損を防ぐための重要なシステム リソースに直接アクセスする必要がなくなりますインターネット アプリケーションを制限する必要があります。In general, Internet applications should be restricted from having direct access to critical system resources, to prevent malicious damage. 既定では、HTMLHTMLクライアント側のスクリプト言語は、重要なシステム リソースにアクセスすることができません。By default, HTMLHTML and client-side scripting languages are not able to access critical system resources. Windows Presentation Foundation (WPF)、ブラウザーからブラウザーでホストされるアプリケーションを起動できるのような一連の制限に準拠している必要があります。Because Windows Presentation Foundation (WPF) browser-hosted applications can be launched from the browser, they should conform to a similar set of restrictions. これらの制限を適用するWPFWPF依存両方コード アクセス セキュリティ (CAS)Code Access Security (CAS)ClickOnceClickOnce(を参照してくださいWPF のセキュリティ方針 - プラットフォーム セキュリティ)。To enforce these restrictions, WPFWPF relies on both コード アクセス セキュリティ (CAS)Code Access Security (CAS) and ClickOnceClickOnce (see WPF Security Strategy - Platform Security). 既定では、ブラウザーでホストされるアプリケーションはインターネット ゾーンを要求CASCASインターネット、ローカル イントラネット、またはローカル コンピューターから起動するかどうかに関係なく、権限のセット。By default, browser-hosted applications request the Internet zone CASCAS set of permissions, irrespective of whether they are launched from the Internet, the local intranet, or the local computer. アクセス許可の完全なセットよりも小さいか何かを実行しているアプリケーションは、部分信頼で実行されていると見なされます。Applications that run with anything less than the full set of permissions are said to be running with partial trust.

WPFWPF さまざまなサポートを実施し、できるだけ多くの機能使用できることを安全にに沿ってを使用して、部分信頼では、 CASCAS、部分信頼のプログラミングの他のサポートを提供します。provides a wide variety of support to ensure that as much functionality as possible can be used safely in partial trust, and along with CASCAS, provides additional support for partial trust programming.

このトピックは、次のセクションで構成されています。This topic contains the following sections:

機能の WPF 部分信頼サポートWPF Feature Partial Trust Support

次の表では、インターネット ゾーン アクセス許可のセットの制限内で使用しても安全な高度な機能の Windows Presentation Foundation (WPF) を示します。The following table lists the high-level features of Windows Presentation Foundation (WPF) that are safe to use within the limits of the Internet zone permission set.

表 1:部分信頼で安全な WPF の機能Table 1: WPF Features that are Safe in Partial Trust

機能分野Feature Area 機能Feature
全般General ブラウザー ウィンドウBrowser Window

起点サイト アクセスSite of Origin Access

IsolatedStorage (512 KB の制限)IsolatedStorage (512KB Limit)

UIAutomation プロバイダーUIAutomation Providers

コマンドの実行Commanding

入力方式エディター (IME)Input Method Editors (IMEs)

スタイラスのタブレットと手描き入力Tablet Stylus and Ink

マウスのキャプチャと移動イベントを使用してシミュレートされたドラッグ アンド ドロップSimulated Drag/Drop using Mouse Capture and Move Events

OpenFileDialogOpenFileDialog

(XamlReader.Load) を使用して XAML 逆シリアル化XAML Deserialization (via XamlReader.Load)
Web 統合Web Integration ブラウザーのダウンロード ダイアログ ボックスBrowser Download Dialog

ユーザーが開始した最上位レベルのナビゲーションTop-Level User-Initiated Navigation

mailto:linksmailto:links

Uniform Resource Identifier パラメーターUniform Resource Identifier Parameters

HTTPWebRequestHTTPWebRequest

IFRAME でホストされている WPF のコンテンツWPF Content Hosted in an IFRAME

フレームを使用して、同じサイトの HTML ページのホストHosting of Same-Site HTML Pages using Frame

Web ブラウザーを使用して、同じサイトの HTML ページのホストHosting of Same Site HTML Pages using WebBrowser

Web サービス (ASMX)Web Services (ASMX)

(Windows Communication Foundation を使用して) web サービスWeb Services (using Windows Communication Foundation)

[スクリプティング]Scripting

ドキュメント オブジェクト モデルDocument Object Model
ビジュアルVisuals 2D および 3D2D and 3D

アニメーションAnimation

メディア (発信元とドメイン間のサイト)Media (Site Of Origin and Cross-Domain)

イメージング/オーディオ/ビデオImaging/Audio/Video
読み取りReading FlowDocumentFlowDocuments

XPS ドキュメントXPS Documents

埋め込み (& a) のシステム フォントEmbedded & System Fonts

CFF & TrueType フォントCFF & TrueType Fonts
編集Editing スペル チェックSpell Checking

RichTextBoxRichTextBox

プレーン テキストとインクのクリップボードのサポートPlaintext and Ink Clipboard Support

ユーザーが開始した貼り付けUser-Initiated Paste

選択したコンテンツのコピーCopying Selected Content
コントロールControls [全般] のコントロールGeneral Controls

この表は、WPFWPF高レベルで機能します。This table covers the WPFWPF features at a high level. 詳細については、Windows Software Development Kit (SDK)Windows Software Development Kit (SDK)ドキュメント内の各メンバーに必要なアクセス許可WPFWPFします。For more detailed information, the Windows Software Development Kit (SDK)Windows Software Development Kit (SDK) documents the permissions that are required by each member in WPFWPF. さらに、次の機能には、特別な考慮事項を含め、部分信頼の実行に関する情報の詳細します。Additionally, the following features have more detailed information regarding partial trust execution, including special considerations.

次の表にアウトライン、WPFWPFインターネットの制限内で実行しても安全ではない機能をゾーンのアクセス許可セット。The following table outlines the WPFWPF features that are not safe to run within the limits of the Internet zone permission set.

表 2:部分信頼で安全でないある WPF 機能Table 2: WPF Features that are Not Safe in Partial Trust

機能分野Feature Area 機能Feature
全般General ウィンドウ (定義されている Windows のアプリケーションとダイアログ ボックス)Window (Application Defined Windows and Dialog Boxes)

SaveFileDialogSaveFileDialog

ファイル システムFile System

レジストリへのアクセスRegistry Access

ドラッグ アンド ドロップDrag and Drop

(XamlWriter.Save) を使用して XAML シリアル化XAML Serialization (via XamlWriter.Save)

UIAutomation クライアントUIAutomation Clients

ソース ウィンドウへのアクセス (HwndHost)Source Window Access (HwndHost)

完全な音声サポートFull Speech Support

Windows フォームの相互運用性Windows Forms Interoperability
ビジュアルVisuals ビットマップ効果Bitmap Effects

イメージのエンコードImage Encoding
編集Editing リッチ テキスト形式のクリップボードRich Text Format Clipboard

完全な XAML のサポートFull XAML support

部分信頼のプログラミングPartial Trust Programming

XBAPXBAPアプリケーション、コードを既定の権限セットを超えるには、セキュリティ ゾーンに応じて異なる動作です。For XBAPXBAP applications, code that exceeds the default permission set will have different behavior depending on the security zone. ユーザーがアプリケーションをインストールしようとすると警告が表示されることもあります。In some cases, the user will receive a warning when they attempt to install it. ユーザーは、インストールを続行するか取り消すかを選択できます。The user can choose to continue or cancel the installation. 次の表は、各セキュリティ ゾーンのアプリケーション動作と、完全な信頼を受け取るアプリケーションで行う必要のある操作を示しています。The following table describes the behavior of the application for each security zone and what you have to do for the application to receive full trust.

セキュリティ ゾーンSecurity Zone 動作Behavior 完全信頼を受け取るための操作Getting Full Trust
ローカル コンピューターLocal computer 完全な信頼を自動的に受け取るAutomatic full trust アクションは必要ありません。No action is needed.
イントラネットおよび信頼済みサイトIntranet and trusted sites 完全な信頼のプロンプトを表示するPrompt for full trust プロンプトにソースが表示されるように、証明書を使用して XBAP に署名します。Sign the XBAP with a certificate so that the user sees the source in the prompt.
インターネットInternet "信頼されていません" というメッセージが表示され、失敗するFails with "Trust Not Granted" 証明書を使用して XBAP に署名します。Sign the XBAP with a certificate.

注意

前の表で説明されている動作では、完全な信頼の Xbap の ClickOnce 信頼済み配置モデルに従っていません。The behavior described in the previous table is for full trust XBAPs that do not follow the ClickOnce Trusted Deployment model.

一般に、許可されたアクセス許可を超える可能性があるコードは、スタンドアロンとブラウザー ホスト アプリケーションの両方の間で共有される共通のコードを使用する可能性があります。In general, code that may exceed the allowed permissions is likely to be common code that is shared between both standalone and browser-hosted applications. CASCAS WPFWPFこのシナリオを管理するためのいくつかの手法を提供します。and WPFWPF offer several techniques for managing this scenario.

CA を使用してアクセス許可の検出Detecting Permissions Using CAS

一部の状況では両方のスタンドアロン アプリケーションで使用されるライブラリのアセンブリで共有コードをXBAPXBAPsします。In some situations, it is possible for shared code in library assemblies to be used by both standalone applications and XBAPXBAPs. このような場合は、コードは、アプリケーションの受賞メンバーのアクセス許可セットで以上のアクセス許可が必要になる機能を実行可能性があります。In these cases, code may execute functionality that could require more permissions than the application's awarded permission set allows. アプリケーションには、Microsoft .NET Framework のセキュリティを使用して特定のアクセス許可があるかどうかを検出できます。Your application can detect whether or not it has a certain permission by using Microsoft .NET Framework security. 具体的には、呼び出すことによって、特定のアクセス許可があるかどうかをテストする、Demandメソッドを必要なアクセス許可のインスタンス。Specifically, it can test whether it has a specific permission by calling the Demand method on the instance of the desired permission. これは、コードでローカル ディスクにファイルを保存する機能があるかどうかをクエリするが次の例に示します。This is shown in the following example, which has code that queries for whether it has the ability to save a file to the local disk:

using System.IO;
using System.IO.IsolatedStorage;
using System.Security;
using System.Security.Permissions;
using System.Windows;

namespace SDKSample
{
    public class FileHandling
    {
        public void Save()
        {
            if (IsPermissionGranted(new FileIOPermission(FileIOPermissionAccess.Write, @"c:\newfile.txt")))
            {
                // Write to local disk
                using (FileStream stream = File.Create(@"c:\newfile.txt"))
                using (StreamWriter writer = new StreamWriter(stream))
                {
                    writer.WriteLine("I can write to local disk.");
                }
            }
            else
            {
                MessageBox.Show("I can't write to local disk.");
            }
        }

        // Detect whether or not this application has the requested permission
        bool IsPermissionGranted(CodeAccessPermission requestedPermission)
        {
            try
            {
                // Try and get this permission
                requestedPermission.Demand();
                return true;
            }
            catch
            {
                return false;
            }
        }


Imports System.IO
Imports System.IO.IsolatedStorage
Imports System.Security
Imports System.Security.Permissions
Imports System.Windows

Namespace SDKSample
    Public Class FileHandling
        Public Sub Save()
            If IsPermissionGranted(New FileIOPermission(FileIOPermissionAccess.Write, "c:\newfile.txt")) Then
                ' Write to local disk
                Using stream As FileStream = File.Create("c:\newfile.txt")
                Using writer As New StreamWriter(stream)
                    writer.WriteLine("I can write to local disk.")
                End Using
                End Using
            Else
                MessageBox.Show("I can't write to local disk.")
            End If
        End Sub

        ' Detect whether or not this application has the requested permission
        Private Function IsPermissionGranted(ByVal requestedPermission As CodeAccessPermission) As Boolean
            Try
                ' Try and get this permission
                requestedPermission.Demand()
                Return True
            Catch
                Return False
            End Try
        End Function

    }
}
    End Class
End Namespace

アプリケーションが、必要なアクセス許可への呼び出しを持たないかどうかDemandセキュリティ例外がスローされます。If an application does not have the desired permission, the call to Demand will throw a security exception. それ以外の場合、アクセス許可が与えられています。Otherwise, the permission has been granted. IsPermissionGranted この動作をカプセル化し、返しますtrueまたはfalseに応じて。IsPermissionGranted encapsulates this behavior and returns true or false as appropriate.

正常な機能が低下Graceful Degradation of Functionality

コードが実行する必要がありますが、権限を持つかどうかを検出できることは、異なるゾーンから実行できるコードにとって重要です。Being able to detect whether code has the permission to do what it needs to do is interesting for code that can be executed from different zones. ゾーンは、1 つを検出するときにまで可能であれば、ユーザーの代替手段を提供することをお勧めします。While detecting the zone is one thing, it is far better to provide an alternative for the user, if possible. たとえば、完全信頼アプリケーションでは、通常、部分信頼アプリケーションは、分離ストレージでファイルを作成のみが、必要な任意の場所のファイルを作成するユーザーができます。For example, a full trust application typically enables users to create files anywhere they want, while a partial trust application can only create files in isolated storage. ファイルを作成するコードは完全な信頼 (スタンドアロン) アプリケーションと部分的な信頼 (ブラウザーによってホストされる) のアプリケーションの両方で共有されているアセンブリに存在する両方のアプリケーションに必要なユーザー ファイルを作成できるようにする場合は、共有コードがかどうかを検出する必要があります。適切な場所にファイルを作成する前に、部分的または完全な信頼で実行されています。If the code to create a file exists in an assembly that is shared by both full trust (standalone) applications and partial trust (browser-hosted) applications, and both applications want users to be able to create files, the shared code should detect whether it is running in partial or full trust before creating a file in the appropriate location. 次のコードでは、両方を示します。The following code demonstrates both.

using System.IO;
using System.IO.IsolatedStorage;
using System.Security;
using System.Security.Permissions;
using System.Windows;

namespace SDKSample
{
    public class FileHandlingGraceful
    {
        public void Save()
        {
            if (IsPermissionGranted(new FileIOPermission(FileIOPermissionAccess.Write, @"c:\newfile.txt")))
            {
                // Write to local disk
                using (FileStream stream = File.Create(@"c:\newfile.txt"))
                using (StreamWriter writer = new StreamWriter(stream))
                {
                    writer.WriteLine("I can write to local disk.");
                }
            }
            else
            {
                // Persist application-scope property to 
                // isolated storage
                IsolatedStorageFile storage = IsolatedStorageFile.GetUserStoreForApplication();
                using (IsolatedStorageFileStream stream = 
                    new IsolatedStorageFileStream("newfile.txt", FileMode.Create, storage))
                using (StreamWriter writer = new StreamWriter(stream))
                {
                    writer.WriteLine("I can write to Isolated Storage");
                }
            }
        }

        // Detect whether or not this application has the requested permission
        bool IsPermissionGranted(CodeAccessPermission requestedPermission)
        {
            try
            {
                // Try and get this permission
                requestedPermission.Demand();
                return true;
            }
            catch
            {
                return false;
            }
        }


Imports System.IO
Imports System.IO.IsolatedStorage
Imports System.Security
Imports System.Security.Permissions
Imports System.Windows

Namespace SDKSample
    Public Class FileHandlingGraceful
        Public Sub Save()
            If IsPermissionGranted(New FileIOPermission(FileIOPermissionAccess.Write, "c:\newfile.txt")) Then
                ' Write to local disk
                Using stream As FileStream = File.Create("c:\newfile.txt")
                Using writer As New StreamWriter(stream)
                    writer.WriteLine("I can write to local disk.")
                End Using
                End Using
            Else
                ' Persist application-scope property to 
                ' isolated storage
                Dim storage As IsolatedStorageFile = IsolatedStorageFile.GetUserStoreForApplication()
                Using stream As New IsolatedStorageFileStream("newfile.txt", FileMode.Create, storage)
                Using writer As New StreamWriter(stream)
                    writer.WriteLine("I can write to Isolated Storage")
                End Using
                End Using
            End If
        End Sub

        ' Detect whether or not this application has the requested permission
        Private Function IsPermissionGranted(ByVal requestedPermission As CodeAccessPermission) As Boolean
            Try
                ' Try and get this permission
                requestedPermission.Demand()
                Return True
            Catch
                Return False
            End Try
        End Function

    }
}
    End Class
End Namespace

多くの場合、部分信頼の代替を検索できる必要があります。In many cases, you should be able to find a partial trust alternative.

イントラネットなど、制御された環境でカスタム マネージ フレームワークをインストールして、クライアントにベース、グローバル アセンブリ キャッシュ (GAC)global assembly cache (GAC)します。In a controlled environment, such as an intranet, custom managed frameworks can be installed across the client base into the グローバル アセンブリ キャッシュ (GAC)global assembly cache (GAC). これらのライブラリの完全な信頼を必要とするコードを実行できるを使用して部分信頼はのみ許可されているアプリケーションから参照AllowPartiallyTrustedCallersAttribute(詳細については、次を参照してくださいセキュリティWPF のセキュリティ。方針 - プラットフォーム セキュリティ)。These libraries can execute code that requires full trust, and be referenced from applications that are only allowed partial trust by using AllowPartiallyTrustedCallersAttribute (for more information, see Security and WPF Security Strategy - Platform Security).

ブラウザーでホストの検出Browser Host Detection

使用してCASCASアクセス許可を確認するには適切な手法をごとのアクセス許可ごとに確認する必要がある場合は。Using CASCAS to check for permissions is a suitable technique when you need to check on a per-permission basis. ただし、この手法に依存例外をキャッチ標準の一部として処理する一般的には推奨されず、パフォーマンスの問題を持つことができます。Although, this technique depends on catching exceptions as a part of normal processing, which is not recommended in general and can have performance issues. 代わりに場合、XAML ブラウザー アプリケーション (XBAP)XAML browser application (XBAP)インターネット ゾーンのサンド ボックス内にのみ実行される、使用できます、BrowserInteropHelper.IsBrowserHostedプロパティに対して true を返すXAML ブラウザー アプリケーション (XBAP)XAML browser applications (XBAPs)します。Instead, if your XAML ブラウザー アプリケーション (XBAP)XAML browser application (XBAP) only runs within the Internet zone sandbox, you can use the BrowserInteropHelper.IsBrowserHosted property, which returns true for XAML ブラウザー アプリケーション (XBAP)XAML browser applications (XBAPs).

注意

IsBrowserHosted のみを実行しているアプリケーションのアクセス許可のどの設定されていないブラウザーでアプリケーションが実行されているかどうかを区別します。IsBrowserHosted only distinguishes whether an application is running in a browser, not which set of permissions an application is running with.

アクセス許可の管理Managing Permissions

既定では、XBAPXBAPs部分信頼 (既定のインターネット ゾーン アクセス許可セット) で実行します。By default, XBAPXBAPs run with partial trust (default Internet zone permission set). ただし、アプリケーションの要件に応じて既定の権限のセットを変更することです。However, depending on the requirements of the application, it is possible to change the set of permissions from the default. たとえば場合、XBAPXBAPsが起動される、ローカルのイントラネットからの次の表に示すように、増加のアクセス許可セット、活用をかかること。For example, if an XBAPXBAPs is launched from a local intranet, it can take advantage of an increased permission set, which is shown in the following table.

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

アクセス許可Permission 属性Attribute LocalIntranetLocalIntranet インターネットInternet
DNSDNS DNS サーバーのアクセスAccess DNS servers [はい]Yes いいえNo
環境変数Environment Variables 読み取りRead [はい]Yes いいえNo
ファイル ダイアログFile Dialogs 開くOpen [はい]Yes [はい]Yes
ファイル ダイアログFile Dialogs 無制限Unrestricted [はい]Yes いいえNo
分離ストレージIsolated Storage ユーザーによるアセンブリの分離Assembly isolation by user [はい]Yes いいえNo
分離ストレージIsolated Storage 不明な分離Unknown isolation [はい]Yes [はい]Yes
分離ストレージIsolated Storage 無制限のユーザー クォータUnlimited user quota [はい]Yes いいえNo
メディアMedia 安全なオーディオ、ビデオ、およびイメージSafe audio, video, and images [はい]Yes [はい]Yes
印刷Printing 既定の印刷Default printing [はい]Yes いいえNo
印刷Printing 安全な印刷Safe printing [はい]Yes [はい]Yes
リフレクションReflection 出力Emit [はい]Yes いいえNo
セキュリティSecurity マネージ コードの実行Managed code execution [はい]Yes [はい]Yes
セキュリティSecurity 付与されたアクセス許可をアサートします。Assert granted permissions [はい]Yes いいえNo
ユーザー インターフェイスUser Interface 無制限Unrestricted [はい]Yes いいえNo
ユーザー インターフェイスUser Interface 安全な最上位レベルの windowsSafe top level windows [はい]Yes [はい]Yes
ユーザー インターフェイスUser Interface 独自のクリップボードOwn Clipboard [はい]Yes [はい]Yes
Web ブラウザーWeb Browser HTML への安全なフレームのナビゲーションSafe frame navigation to HTML [はい]Yes [はい]Yes

注意

切り取りと貼り付けが部分信頼で場合にだけ許可ユーザーが開始しました。Cut and Paste is only allowed in partial trust when user initiated.

アクセス許可を増やす必要がある場合は、プロジェクトの設定と、ClickOnce アプリケーション マニフェストを変更する必要があります。If you need to increase permissions, you need to change the project settings and the ClickOnce application manifest. 詳細については、「WPF XAML ブラウザー アプリケーションの概要」をご覧ください。For more information, see WPF XAML Browser Applications Overview. 次のドキュメントも便利な場合があります。The following documents may also be helpful.

場合、XBAPXBAP完全な信頼が必要です。 要求されたアクセス許可を増やすと同じツールを使用することができます。If your XBAPXBAP requires full trust, you can use the same tools to increase the requested permissions. ただし、XBAPXBAP上にインストールされ、イントラネット、ローカル コンピューターとは、ブラウザーの信頼済みまたは許可されたサイトに記載されている URL から起動された場合のみ、完全な信頼が受信されます。Although an XBAPXBAP will only receive full trust if it is installed on and launched from the local computer, the intranet, or from a URL that is listed in the browser's trusted or allowed sites. アプリケーションは、イントラネットまたは信頼済みサイトからインストールする場合、ユーザーには管理者特権でのアクセス許可のことを通知する標準の ClickOnce プロンプトが表示されます。If the application is installed from the intranet or a trusted site, the user will receive the standard ClickOnce prompt notifying them of the elevated permissions. ユーザーは、インストールを続行するか取り消すかを選択できます。The user can choose to continue or cancel the installation.

また、任意のセキュリティ ゾーンから完全な信頼の展開用 ClickOnce 信頼済み配置モデルを使用できます。Alternatively, you can use the ClickOnce Trusted Deployment model for full trust deployment from any security zone. 詳細については、次を参照してください。 Trusted Application Deployment Overviewセキュリティします。For more information, see Trusted Application Deployment Overview and Security.

関連項目See also