WPF Kısmi Güven GüvenliğiWPF Partial Trust Security

Genel olarak, Internet uygulamaları kötü amaçlı hasarı önlemek için kritik sistem kaynaklarına doğrudan erişimini sınırlı olmalıdır.In general, Internet applications should be restricted from having direct access to critical system resources, to prevent malicious damage. Varsayılan olarak, HTMLHTML ve istemci tarafı komut dosyası dilleri önemli sistem kaynaklarına erişmek mümkün değildir.By default, HTMLHTML and client-side scripting languages are not able to access critical system resources. Windows Presentation Foundation (WPF) tarayıcıda tutulan uygulamalar tarayıcıdan başlatılabilir çünkü kısıtlamaları benzer bir kümesi için uygun olmalıdır.Because Windows Presentation Foundation (WPF) browser-hosted applications can be launched from the browser, they should conform to a similar set of restrictions. Bu kısıtlamalar uygulamak WPFWPF hem de bağımlı Kod Erişimi Güvenliği (CAS)Code Access Security (CAS) ve ClickOnceClickOnce (bkz WPF güvenlik stratejisi - Platform güvenliği).To enforce these restrictions, WPFWPF relies on both Kod Erişimi Güvenliği (CAS)Code Access Security (CAS) and ClickOnceClickOnce (see WPF Security Strategy - Platform Security). Varsayılan olarak, tarayıcıda tutulan uygulamalar Internet bölgesine istek CASCAS Internet, yerel intranet veya yerel bilgisayarda başlatılan fark etmeksizin izin kümesi.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. Şey tam izinler kümesini değerinden ile çalışan uygulamalar kısmi güven ile çalıştırılması söylenir.Applications that run with anything less than the full set of permissions are said to be running with partial trust.

WPFWPF çok çeşitli kadar işlevselliği mümkün olduğunca güvenli bir şekilde kısmi güvende ve birlikte kullanılabileceğini emin olmak için destek sağlayan CASCAS, kısmi güven programlama için ek destek sağlar.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.

Bu konu aşağıdaki bölümleri içermektedir:This topic contains the following sections:

WPF özellik kısmi güven desteğiWPF Feature Partial Trust Support

Internet bölgesi izin kümesinin sınırlar içinde kullanmak üzere güvenli üst düzey özellikler Windows Presentation Foundation (WPF) aşağıdaki tabloda listelenmektedir.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.

Tablo 1: WPF kısmi güven güvenli olan özellikleriTable 1: WPF Features that are Safe in Partial Trust

Özellik alanıFeature Area ÖzellikFeature
GenelGeneral Tarayıcı penceresiBrowser Window

Site kaynak erişimiSite of Origin Access

IsolatedStorage (512KB sınırını)IsolatedStorage (512KB Limit)

UIAutomation sağlayıcılarıUIAutomation Providers

Komut vermeye genelCommanding

Giriş Yöntemi Düzenleyicileri (IME'ler)Input Method Editors (IMEs)

Tablet kalem ve mürekkebiTablet Stylus and Ink

Fare yakalama ve taşıma olaylarını kullanarak sanal sürükle/bırakSimulated Drag/Drop using Mouse Capture and Move Events

OpenFileDialogOpenFileDialog

XAML seri durumundan çıkarma (aracılığıyla XamlReader.Load)XAML Deserialization (via XamlReader.Load)
Web tümleştirmeWeb Integration Tarayıcı indirme iletişim kutusuBrowser Download Dialog

Kullanıcı tarafından başlatılan en üst düzey GezintiTop-Level User-Initiated Navigation

mailto:Linksmailto:links

Tekdüzen Kaynak Tanımlayıcısı parametreleriUniform Resource Identifier Parameters

HTTPWebRequestHTTPWebRequest

Bir IFRAME içinde barındırılan bir WPF içeriğiWPF Content Hosted in an IFRAME

Aynı sitede HTML sayfaları çerçevesini kullanarak barındırmaHosting of Same-Site HTML Pages using Frame

Aynı Site HTML WebBrowser kullanan sayfaları barındırmaHosting of Same Site HTML Pages using WebBrowser

Web Hizmetleri (ASMX)Web Services (ASMX)

Web Hizmetleri (Windows Communication Foundation'ı kullanarak)Web Services (using Windows Communication Foundation)

Betik OluşturmaScripting

Belge nesne modeliDocument Object Model
GörselleriVisuals 2B ve 3B2D and 3D

AnimasyonAnimation

Medya (kaynak etki alanları arası ve Site)Media (Site Of Origin and Cross-Domain)

Görüntüleme/Ses/VideoImaging/Audio/Video
OkumaReading FlowDocumentsFlowDocuments

XPS belgeleriXPS Documents

Katıştırılmış & sistem yazı tipleriEmbedded & System Fonts

CFF & TrueType yazı tipleriCFF & TrueType Fonts
DüzenlemeEditing Yazım denetimiSpell Checking

RichTextBoxRichTextBox

Düz metin ve mürekkep Pano desteğiPlaintext and Ink Clipboard Support

Kullanıcı tarafından başlatılan YapıştırUser-Initiated Paste

İçerik seçili kopyalamaCopying Selected Content
DenetimlerControls Genel denetimleriGeneral Controls

Bu tabloda yer almaktadır WPFWPF yüksek bir düzeyde özellikleri.This table covers the WPFWPF features at a high level. Daha ayrıntılı bilgi edinmek için Windows Software Development Kit (SDK)Windows Software Development Kit (SDK) her üye tarafından gerekli olan izinleri belgeleri 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. Ayrıca, aşağıdaki özellikleri kısmi güven yürütme, özel durumlar dahil olmak üzere ilgili bilgileri daha ayrıntılı.Additionally, the following features have more detailed information regarding partial trust execution, including special considerations.

Aşağıdaki tabloda ana hatlarını WPFWPF bölge izin kümesi Internet sınırlarda çalıştırılmasının güvenli olmayan özellikleri.The following table outlines the WPFWPF features that are not safe to run within the limits of the Internet zone permission set.

Tablo 2: WPF kısmi güven içinde güvenli olan özelliklerTable 2: WPF Features that are Not Safe in Partial Trust

Özellik alanıFeature Area ÖzellikFeature
GenelGeneral Pencere (uygulama tanımlı Windows ve iletişim kutuları)Window (Application Defined Windows and Dialog Boxes)

SaveFileDialogSaveFileDialog

Dosya sistemiFile System

Registry AccessRegistry Access

Sürükleme ve BırakmaDrag and Drop

XAML serileştirme (aracılığıyla XamlWriter.Save)XAML Serialization (via XamlWriter.Save)

UIAutomation istemcilerUIAutomation Clients

Kaynak penceresi erişim (HwndHost)Source Window Access (HwndHost)

Tam konuşma desteğiFull Speech Support

Windows Forms birlikte çalışabilirlikWindows Forms Interoperability
GörselleriVisuals Bit Eşlem EfektleriBitmap Effects

Görüntü kodlamaImage Encoding
DüzenlemeEditing Zengin metin biçimi PanoRich Text Format Clipboard

XAML için tam destekFull XAML support

Kısmi güven programlamaPartial Trust Programming

İçin XBAPXBAP uygulamaları varsayılan izin kümesinin aşan kodu güvenlik bölgesine bağlı olarak farklı bir davranış olacaktır.For XBAPXBAP applications, code that exceeds the default permission set will have different behavior depending on the security zone. Bazı durumlarda, kullanıcı, yüklemeye çalıştığınızda bir uyarı alırsınız.In some cases, the user will receive a warning when they attempt to install it. Kullanıcı yüklemeyi iptal devam etmek seçebilirsiniz.The user can choose to continue or cancel the installation. Aşağıdaki tabloda her güvenlik bölgesi ve hangi uygulama tam güven almak yapmanız gereken uygulama davranışını açıklar.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.

Güvenlik BölgesiSecurity Zone DavranışBehavior Tam güven almaGetting Full Trust
Yerel bilgisayarLocal computer Otomatik tam güvenAutomatic full trust Eylem gerekmiyor.No action is needed.
İntranet ve Güvenilen sitelerIntranet and trusted sites İçin tam güven istemiPrompt for full trust Kullanıcı istemi kaynakta görebilmesi için XBAP bir sertifika ile oturum açın.Sign the XBAP with a certificate so that the user sees the source in the prompt.
InternetInternet "Güven verilmeyen" ile başarısız oluyorFails with "Trust Not Granted" XBAP bir sertifika ile oturum açın.Sign the XBAP with a certificate.

Not

Önceki tabloda açıklanan tam güven güvenilen ClickOnce dağıtım modeline izlemeyin XBAP'ler davranıştır.The behavior described in the previous table is for full trust XBAPs that do not follow the ClickOnce Trusted Deployment model.

Genel olarak, izin verilen izinleri aşabilir kod tek başına ve tarayıcıda tutulan uygulamalar arasında paylaşılan ortak kod olacak şekilde olasıdır.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 ve WPFWPF bu senaryo yönetmek için çeşitli teknikler sunar.and WPFWPF offer several techniques for managing this scenario.

CA'ları kullanarak izinleri algılamaDetecting Permissions Using CAS

Bazı durumlarda, iki tek başına uygulamalar tarafından kullanılmak üzere kitaplık derlemeleri, paylaşılan kod için mümkündür ve XBAP'lerXBAPs.In some situations, it is possible for shared code in library assemblies to be used by both standalone applications and XBAP'lerXBAPs. Bu durumlarda, kod uygulamanın ödül kazanmış bir izin kümesi izin verdiğinden daha fazla izin gerektirebilecek işlevi yürütebilir.In these cases, code may execute functionality that could require more permissions than the application's awarded permission set allows. Microsoft .NET Framework güvenliği kullanarak belirli bir izni sahip olup olmadığını, uygulamanızın algılayabilir.Your application can detect whether or not it has a certain permission by using Microsoft .NET Framework security. Özellikle, belirli bir izni çağırarak sahip olup olmadığını sınayabilirsiniz Demand istenen izin örneğinde yöntemi.Specifically, it can test whether it has a specific permission by calling the Demand method on the instance of the desired permission. Bu, yerel diskteki bir dosya kaydetme olanağı sahip olup olmadığı için bu sorguları koduna sahip aşağıdaki örnekte gösterilmiştir: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

Bir uygulama çağrısı istenen izni yoksa Demand bir güvenlik özel durum oluşturur.If an application does not have the desired permission, the call to Demand will throw a security exception. Aksi takdirde, izin verildi.Otherwise, the permission has been granted. IsPermissionGranted Bu davranış kapsüller ve döndürür true veya false uygun şekilde.IsPermissionGranted encapsulates this behavior and returns true or false as appropriate.

Normal performansında işleviGraceful Degradation of Functionality

Kod ne yapması gereken iznine sahip olup olmadığını algılayabilmeniz için farklı bölgelerden yürütülebilir kod ilginçtir.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. Bölgesi olan tek şey, algılanırken mümkünse kullanıcı için alternatif sağlayacak kadar iyidir.While detecting the zone is one thing, it is far better to provide an alternative for the user, if possible. Örneğin, bir tam güven uygulaması, genellikle kullanıcıların dosyaları kısmen güvenilen uygulamada yalnızca yalıtılmış depolamada dosya oluşturabilirsiniz, ancak istedikleri her yerde oluşturmasına olanak tanır.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. Bir dosya oluşturmak için kod tam güven (tek başına) uygulamaları ve kısmi güven uygulamaları (tarayıcı tarafından barındırılan) tarafından paylaşılan bir derleme var ve kullanıcıların dosyaları oluşturmak her iki uygulama istediğiniz, paylaşılan kod olup olmadığını algılanmalıdır bir dosyanın uygun konumda oluşturmadan önce kısmi veya tam güvende çalıştırma.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. Aşağıdaki kod, her ikisi de gösterir.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

Çoğu durumda, kısmi güven alternatif bulamadı olmalıdır.In many cases, you should be able to find a partial trust alternative.

Bir intranet gibi denetimli bir ortamda özel bir yönetilen çerçeve içine temel istemci arasında yüklenebilir genel bütünleştirilmiş kod önbelleği (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 genel bütünleştirilmiş kod önbelleği (GAC)global assembly cache (GAC). Bu kitaplıklar, tam güven gerektiren kod yürütebilir ve yalnızca kısmi güven kullanarak izin verilen uygulamalar başvurulan AllowPartiallyTrustedCallersAttribute (daha fazla bilgi için güvenlik ve WPF Güvenliği Stratejisi - Platform güvenliği).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).

Tarayıcı konak algılamaBrowser Host Detection

Kullanarak CASCAS izni başına temelinde denetlemek gerektiğinde izinlerini denetlemek için bir uygun tekniğidir.Using CASCAS to check for permissions is a suitable technique when you need to check on a per-permission basis. Bu teknik çalýþýrçalýþma yakalama özel durumlarda normal bir parçası olarak işleme bağlı olsa da, genel olarak önerilmez ve performans sorunları olabilir.Although, this technique depends on catching exceptions as a part of normal processing, which is not recommended in general and can have performance issues. Bunun yerine, varsa, XAML tarayıcısı uygulaması (XBAP)XAML browser application (XBAP) kullanabileceğiniz Internet bölgesi korumalı alan içinde yalnızca çalışır, BrowserInteropHelper.IsBrowserHosted true döndüren özellik XAML tarayıcısı uygulamaları (XBAP'ler)XAML browser applications (XBAPs).Instead, if your XAML tarayıcısı uygulaması (XBAP)XAML browser application (XBAP) only runs within the Internet zone sandbox, you can use the BrowserInteropHelper.IsBrowserHosted property, which returns true for XAML tarayıcısı uygulamaları (XBAP'ler)XAML browser applications (XBAPs).

Not

IsBrowserHosted yalnızca bir uygulama değil hangi uygulama izin kümesi ile çalışan bir tarayıcıda çalışıyor olsun ayırır.IsBrowserHosted only distinguishes whether an application is running in a browser, not which set of permissions an application is running with.

İzinleri yönetmeManaging Permissions

Varsayılan olarak, XBAP'lerXBAPs (varsayılan Internet bölgesi izin kümesi) kısmi güven ile çalıştırın.By default, XBAP'lerXBAPs run with partial trust (default Internet zone permission set). Ancak, uygulama gereksinimlerine bağlı olarak, varsayılan izinler kümesini değiştirmek mümkündür.However, depending on the requirements of the application, it is possible to change the set of permissions from the default. Örneğin, bir XBAP'lerXBAPs başlatılan bir yerel intranetten, aşağıdaki tabloda gösterilen bir artan izin kümesinin yararlanabilirsiniz.For example, if an XBAP'lerXBAPs is launched from a local intranet, it can take advantage of an increased permission set, which is shown in the following table.

Tablo 3: LocalIntranet ve Internet izinleriTable 3: LocalIntranet and Internet Permissions

İzinPermission ÖznitelikAttribute LocalIntranetLocalIntranet InternetInternet
DNSDNS Erişim DNS sunucularıAccess DNS servers EvetYes HayırNo
Ortam DeğişkenleriEnvironment Variables OkuRead EvetYes HayırNo
Dosya iletişim kutularıFile Dialogs OpenOpen EvetYes EvetYes
Dosya iletişim kutularıFile Dialogs SınırsızUnrestricted EvetYes HayırNo
Yalıtılmış DepolamaIsolated Storage Derleme kullanıcıya göre yalıtımAssembly isolation by user EvetYes HayırNo
Yalıtılmış DepolamaIsolated Storage Bilinmeyen yalıtımUnknown isolation EvetYes EvetYes
Yalıtılmış DepolamaIsolated Storage Sınırsız kullanıcı kotasıUnlimited user quota EvetYes HayırNo
MedyaMedia Güvenli ses, video ve görüntüSafe audio, video, and images EvetYes EvetYes
YazdırmaPrinting Varsayılan yazdırmaDefault printing EvetYes HayırNo
YazdırmaPrinting Güvenli YazdırmaSafe printing EvetYes EvetYes
YansımaReflection YaymaEmit EvetYes HayırNo
GüvenlikSecurity Yönetilen kod yürütmesiManaged code execution EvetYes EvetYes
GüvenlikSecurity Verilen izinler onaylamaAssert granted permissions EvetYes HayırNo
Kullanıcı ArabirimiUser Interface SınırsızUnrestricted EvetYes HayırNo
Kullanıcı ArabirimiUser Interface Güvenli üst düzey windowsSafe top level windows EvetYes EvetYes
Kullanıcı ArabirimiUser Interface Kendi PanoOwn Clipboard EvetYes EvetYes
Web tarayıcısıWeb Browser Güvenli gezintiyi HTMLSafe frame navigation to HTML EvetYes EvetYes

Not

Kes ve Yapıştır yalnızca izin verilir kısmi güvende kullanıcı tarafından başlatılan olduğunda.Cut and Paste is only allowed in partial trust when user initiated.

İzinleri artırmanız gerekiyorsa, ClickOnce Uygulama bildirimi ve proje ayarları değiştirmeniz gerekir.If you need to increase permissions, you need to change the project settings and the ClickOnce application manifest. Daha fazla bilgi için WPF XAML tarayıcı uygulamalarına genel bakış.For more information, see WPF XAML Browser Applications Overview. Aşağıdaki belgeler de yararlı olabilir.The following documents may also be helpful.

Varsa, XBAPXBAP tam güven gerektirir istenen izinleri artırmak için kullandığınız araçları kullanabilirsiniz.If your XBAPXBAP requires full trust, you can use the same tools to increase the requested permissions. Ancak bir XBAPXBAP yüklü ve yerel bilgisayardan, intranet veya güvenilen veya izin verilen siteler tarayıcının listelenen bir URL'den başlatılan yalnızca tam güven alırsınız.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. İntranet veya güvenilen sitesinden uygulama yüklü değilse, kullanıcı yükseltilmiş izinler göndermeyeceğinizi standart ClickOnce istemi alırsınız.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. Kullanıcı yüklemeyi iptal devam etmek seçebilirsiniz.The user can choose to continue or cancel the installation.

Alternatif olarak, herhangi bir güvenlik bölgesi dağıtımından tam güven için ClickOnce dağıtımı güvenilen modelini kullanabilirsiniz.Alternatively, you can use the ClickOnce Trusted Deployment model for full trust deployment from any security zone. Daha fazla bilgi için Trusted Application Deployment Overview ve güvenlik.For more information, see Trusted Application Deployment Overview and Security.

Ayrıca bkz.See also