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

Genel olarak, Internet uygulamaları kötü amaçlı zarar önlemek için önemli sistem kaynaklarına doğrudan erişimi olmaktan sınırlandırılmalı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ı dili ö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 barındırılan uygulamalar tarayıcıdan başlatılabilir çünkü kısıtlamaları benzer bir dizi 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ı zorlamak için WPFWPF hem dayanır 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 barındırılan uygulamalar Internet bölgesi isteği CASCAS Internet, yerel intranet ya da yerel bilgisayar başlatıldığında yedeklemiş izinler 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. Herhangi bir şey izinler kümesini değerinden ile çalışan uygulamalar, kısmi güven ile çalışan 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üven ve ile birlikte kullanılabilir emin olmak için destek sağlar 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

Aşağıdaki tabloda Internet bölgesi izin kümesi sınırları içinde kullanmak güvenli üst düzey özellikleri Windows Presentation Foundation (WPF) listeler.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: kısmi güven kasada WPF özellikleriTable 1: WPF Features that are Safe in Partial Trust

Özellik alanıFeature Area ÖzellikFeature
GenelGeneral Bir tarayıcı penceresiBrowser Window

Kaynak erişim siteSite of Origin Access

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

UIAutomation sağlayıcılarıUIAutomation Providers

Komut vermeCommanding

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

Tablet kalem ve mürekkepTablet 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 durumdan çıkarma (aracılığıyla XamlReader.Load)XAML Deserialization (via XamlReader.Load)
Web tümleştirmeWeb Integration Tarayıcı indirme iletişim kutusuBrowser Download Dialog

Üst düzey kullanıcı tarafından başlatılan gezinmeTop-Level User-Initiated Navigation

mailto:Linksmailto:links

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

HTTPWebRequestHTTPWebRequest

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

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

Aynı Site HTML WebBrowser kullanarak 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örselVisuals 2B ve 3B2D and 3D

AnimasyonAnimation

Ortam (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ış & 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

Kopyalama içerik seçilmediCopying Selected Content
DenetimlerControls Genel denetimleriGeneral Controls

Bu tabloda yer almaktadır WPFWPF yüksek bir düzeyde özellikler.This table covers the WPFWPF features at a high level. Daha ayrıntılı bilgi, için Windows Software Development Kit (SDK)Windows Software Development Kit (SDK) içindeki her üyenin gerektirdiği izinler 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 daha kısmi güven yürütme, özel durumlar dahil olmak üzere ilgili ayrıntılı bilgiler.Additionally, the following features have more detailed information regarding partial trust execution, including special considerations.

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

Tablo 2: kısmi güven içinde güvenli WPF özellikleriTable 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

Kayıt defteri erişimiRegistry Access

Sürükleme ve BırakmaDrag and Drop

XAML seri hale getirme (aracılığıyla XamlWriter.Save)XAML Serialization (via XamlWriter.Save)

UIAutomation istemcileriUIAutomation Clients

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

Tam konuşma desteğiFull Speech Support

Windows Forms birlikte çalışabilirlikWindows Forms Interoperability
GörselVisuals 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ümesi aşan kodu güvenlik bölgesine bağlı olarak farklı davranışlar olacaktır.For XBAPXBAP applications, code that exceeds the default permission set will have different behavior depending on the security zone. Yüklemeye çalıştığınızda bazı durumlarda, kullanıcı bir uyarı alırsınız.In some cases, the user will receive a warning when they attempt to install it. Kullanıcı, yükleme devam etmek seçebilirsiniz.The user can choose to continue or cancel the installation. Aşağıdaki tabloda her güvenlik bölgesi ve uygulama tam güven almak yapmanız gereken uygulamanın davranışını tanımlar.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 Tam güven istemiPrompt for full trust Kullanıcı istemi kaynağında 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 yazma izni" ile başarısız oluyorFails with "Trust Not Granted" XBAP bir sertifika ile oturum açın.Sign the XBAP with a certificate.

Not

Yukarıdaki tabloda açıklanan için tam güven ClickOnce güvenilen dağıtım modeli izlemeyin XBAP 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 barındırılan uygulamalar arasında paylaşılan ortak kodun olması 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, her iki tek başına uygulamaları tarafından kullanılmak üzere kitaplık derlemeleri paylaşılan kodda 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 uygulamanın izin verilen kümesi izin verdiğinden daha fazla izin gerektirebilir işlevselliği kod yürütmek.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 izne sahip olup olmadığına bakılmaksızı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, çağırarak belirli bir izin 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 dosya yerel diske kaydetmeye özelliği olup 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 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ış yalıtır ve döndürür true veya false uygun şekilde.IsPermissionGranted encapsulates this behavior and returns true or false as appropriate.

Normal düşmesine işleviGraceful Degradation of Functionality

Kod yapmanız gerekeni iznine sahip olup olmadığını algılamak için farklı bölgelerden yürütülen kod için ilginç olacaktır.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ölge 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ısmi güven uygulama yalnızca yalıtılmış depolamada dosya oluşturabilirsiniz, ancak istedikleri her yerde oluşturmasını sağlar.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. Derlemedeki tam güven (tek başına) uygulamalar ve kısmi güven uygulamaları (tarayıcı barındırılan) tarafından paylaşılan bir dosya oluşturmak için kodu varsa ve her iki uygulamayı kullanıcıların dosyaları oluşturmak istediğiniz, paylaşılan kod olup olmadığını algılayan bir dosyayı 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 bulamıyor olması gerekir.In many cases, you should be able to find a partial trust alternative.

Bir intranet gibi denetimli bir ortamda özel yönetilen çerçeveleri içine temel istemci üzerinden 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 kısmi güven kullanarak yalnızca izin verilen uygulamaları başvurulan AllowPartiallyTrustedCallersAttribute (daha fazla bilgi için bkz: 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 izinlerini denetlemek için bir izin başına temelinde denetlemek gerektiğinde uygun bir tekniği olan.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 durumları normal bir parçası olarak işleme bağlı olsa da, genelde ö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 yalnızca çalıştığında Internet bölgesi korumalı alanı içinde BrowserInteropHelper.IsBrowserHosted için true değerini döndürür özelliği 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 bir tarayıcıda, uygulama izinleri olmayan hangi kümesi ile çalışan bir uygulama çalışıp çalışmadığını yalnızca 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 kısmi güven (varsayılan Internet bölgesi izin kümesi) ç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 yerel intranet bağlantısı, aşağıdaki tabloda gösterilen bir artan izin kümesi özelliklerden 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 Kullanıcı tarafından derleme yalıtımıAssembly 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ütmeManaged code execution EvetYes EvetYes
GüvenlikSecurity İzin verilenler 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 Pano sahibiOwn Clipboard EvetYes EvetYes
Web tarayıcısıWeb Browser Güvenli gezintiyi HTMLSafe frame navigation to HTML EvetYes EvetYes

Not

Kesme ve yapıştırma izin verilir kısmi güvende kullanıcı başlatıldığında.Cut and Paste is only allowed in partial trust when user initiated.

İzinleri artırmak gerekiyorsa, proje ayarlarını ve ClickOnce Uygulama bildirimi 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 bkz: WPF XAML tarayıcısı uygulamaları 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 gerektiren istenen izinleri artırmak üzere aynı 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ü olduğundan ve yerel bilgisayar, intranet veya tarayıcının güvenilen veya izin verilen siteler listelenir bir URL 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. Uygulama intranet veya güvenilen bir site yüklediyseniz kullanıcı yükseltilmiş izinler bildiren standart ClickOnce ileti alacaksı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ükleme devam etmek seçebilirsiniz.The user can choose to continue or cancel the installation.

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

Ayrıca Bkz.See Also

GüvenlikSecurity
WPF Güvenlik Stratejisi - Platform GüvenliğiWPF Security Strategy - Platform Security
WPF Güvenlik Stratejisi - Güvenlik MühendisliğiWPF Security Strategy - Security Engineering