Aracılığıyla paylaş


WPF Kısmi Güven Güvenliği

Genel olarak, Internet uygulamaları kötü zarar önlemek için kritik sistem kaynaklarına doğrudan erişim sağlamasını sınırlanması. Varsayılan olarak, HTML ve istemci tarafı komut dosyası dilleri kullanamayan erişmeyi kritik sistem kaynakları. Çünkü Windows Presentation Foundation (WPF) tarayıcı tarayıcı barındırılan uygulamalar başlatılabilir, bunlar benzer kümesine uymasıkısıtlamalar. Bu kısıtlamaları zorlamak için WPF dayanır her ikisinde birden Code Access Security (CAS) ve ClickOnce (bkz: WPF Güvenlik Stratejisi - Platform Güvenliği). Varsayılan olarak, Internet bölgesi tarayıcı barındırılan uygulamaların isteği CAS olup başlatıldığında Internet, yerel intranet veya bağımsız olarak, izin kümesiyerel bilgisayar. Herhangi bir şeyle tam izinler kümesi'dan çalışan uygulamalar, kısmi güven ile çalışan söylenir.

WPFçok çeşitli işlevselliği mümkün olduğunca güvenli bir şekilde kısmi güven ve birlikte kullanılabileceğini emin olmak için destek sağlar CAS, için ek destek sağlarkısmi güven programlama.

This topic contains the following sections:

  • wpf özelliği kısmi güven destek

  • Kısmi güven programlama

  • Managing Permissions

wpf özelliği kısmi güven destek

Üst düzey özellikleri aşağıdaki tabloda listelenmektedir Windows Presentation Foundation (WPF) güvenli Internet bölgesi izin kümesi sınırlar içinde kullanma

Table 1: Kısmi güven güvenli olan wpf özellikleri

Feature Area

Feature

Genel

Tarayıcı penceresi

Site kaynağı erişimi

IsolatedStorage (512 kb sınırı)

UIAutomation sağlayıcıları

Mükemmel bir

Input Method Editors (IMEs)

Tablet Stilus ve mürekkep

Fare yakalama ve hareket olaylarını kullanarak benzetilen sürükle/bırak

OpenFileDialog

xaml seri kaldırma (XamlReader.Load) aracılığıyla

Web tümleşmesi

Tarayıcı yükleme iletişim kutusu

Üst düzey kullanıcı tarafından başlatılan Gezinti

mailto:Links

Tekdüzen Kaynak Tanımlayıcısı parametreleri

HTTPWebRequest

Bir IFRAME içinde barındırılan wpf içeriği

Çerçeve kullanarak Site aynı html sayfaları barındırma

Aynı Site html WebBrowser kullanarak sayfaları barındırma

Web servisleri (asmx)

Web Hizmetleri (Windows Communication Foundation kullanarak)

Scripting

Belge Nesne modeli

Görsel öğeler

2D and 3D

Animation

Ortam (kaynak etki alanları arası ve Site)

Görüntü/Ses/Video

Okuma

FlowDocuments

XPS Documents

Katıştırılmış & Sistem yazı tipleri

cff & TrueType yazı tipleri

Editing

Yazım denetimi

RichTextBox

Düz metin ve mürekkep Pano destek

Kullanıcı tarafından başlatılan Yapıştır

İçeriği seçilen kopyalama

Controls

Genel denetimleri

Bu tabloda yer almaktadır WPF özellikleri yüksek düzeyi. Daha ayrıntılı bilgi, için Windows Software Development Kit (SDK) Belgeler her üyesi tarafından gerekli izinleri WPF. Ayrıca, aşağıdaki özellikleri daha özel hususlar da dahil olmak üzere, kısmi güven yürütme ile ilgili ayrıntılı bilgi.

Aşağıdaki tablo ana hatlarını WPF Internet bölgesi izin kümesi sınırlar içinde çalıştırmak güvenli özellikleri

Table 2: Kısmi güven içinde güvenli olan wpf özellikleri

Feature Area

Feature

Genel

Pencere (uygulama tanımlı pencereler ve iletişim kutuları)

SaveFileDialog

File System

Kayıt defteri erişimi

Drag and Drop

xaml seri hale getirme (XamlWriter.Save) aracılığıyla

UIAutomation istemcileri

Kaynak pencere erişim (HwndHost)

Konuşma için tam destek

Windows formları ile birlikte çalışabilirlik

Görsel öğeler

Bitmap Effects

Görüntü kodlama

Editing

Zengin metin biçimi Pano

xaml için tam destek

Kısmi güven programlama

İçin XBAP uygulamaları, kod varsayılan izin kümesi aşan vardır farklı davranış bağlı olarak güvenlik bölgesi. Yüklemeye çalıştığınızda, bazı durumlarda, kullanıcı bir uyarı alırsınız. Kullanıcı, devam veya yüklemeyi iptal etmeyi seçebilirsiniz. Aşağıdaki tabloda, her güvenlik bölgesi ve uygulamanın tam güven almak için yapmanız gereken uygulama davranışını açıklar.

Security Zone

Behavior

Tam güven alma

Yerel bilgisayar

Otomatik tam güven

Hiçbir eylem gerekli değildir.

İntranet ve güvenilen siteler

Tam güven istemi

Kullanıcı istemi kaynağında görebilmesi için xbap bir sertifikayla imzalamak.

Internet

"Güven değil verilen" ile başarısız oluyor

xbap bir sertifikayla imzalamak.

NotNot

Önceki tabloda açıklanan tam güven güvenilir ClickOnce dağıtım modeli izlemeyin XBAP davranıştır.

Genel olarak, izin verilen izinler aşabilir kod hem tek başına hem de tarayıcı barındırılan uygulamalar arasında paylaşılan ortak kod olması olasıdır. CASve WPF sunan çeşitli teknikler yönetmek bu senaryo.

CA'ları kullanarak izinleri algılama

Bazı durumlarda, paylaşılan kitaplığı derlemeler her iki bağımsız uygulamalar tarafından kullanılmak üzere kodda olabilir ve XBAPs. Bu gibi durumlarda, kodu uygulamanın awarded izin kümesi izin verdiğinden daha fazla izinleri gerektiren işlevleri yürütür. Uygulamanız, belirli bir izin kullanarak olup olmadığını algılayabilir Microsoft .NET Framework Güvenlik. Çağırarak belirli bir izin var olup olmadığını özellikle sınayabilirsiniz Demand yöntemi örneğinde istenen izni. Bu, bu sorguları yerel diske bir dosya kaydetme olanağı olup koduna sahip aşağıdaki örnekte gösterilmiştir:


Imports System.IO ' File, FileStream, StreamWriter
Imports System.IO.IsolatedStorage ' IsolatedStorageFile
Imports System.Security ' CodeAccesPermission, IsolatedStorageFileStream
Imports System.Security.Permissions ' FileIOPermission, FileIOPermissionAccess
Imports System.Windows ' MessageBox

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
using System.IO; // File, FileStream, StreamWriter
using System.IO.IsolatedStorage; // IsolatedStorageFile
using System.Security; // CodeAccesPermission, IsolatedStorageFileStream
using System.Security.Permissions; // FileIOPermission, FileIOPermissionAccess
using System.Windows; // MessageBox

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;
            }
        }



...


    }
}

Bir uygulama istenen, çağrı izni yok ise Demand durum bir güvenlik özel durumu. Aksi takdirde, izin verildi. IsPermissionGrantedBu davranış Kapsüller ve döner true veya false uygun olarak.

İşlevlerin düzgün biçimde azalma

Kod yapmak gerekeni yapmak için izne sahip olup olmadığını algılamak için farklı bölgelerinden çalıştırılabilir kodu için ilginçtir. Bölge olan bir şey, algılama sırasında başka bir kullanıcı için mümkünse sağlamak şu ana kadar iyidir. Örneğin, tam güven uygulama genellikle bir kısmi güven uygulaması yalnızca yalıtılmış depolama dosyaları oluşturabileceğiniz gibi istedikleri her yerde dosyaları oluşturmak kullanıcılar sağlar. Tam güven (bağımsız) uygulamaları ve kısmi güven (tarayıcı barındırılan) uygulamaları tarafından paylaşılan bir derlemede bir dosyası oluşturmak için kod varsa ve her iki uygulamalar kullanıcıların dosyaları oluşturmak istediğiniz paylaşılan kod, kısmi veya tam güven uygun konumda dosyayı oluşturmadan önce çalışır durumda olup olmadığını algılamalıdır. Aşağıdaki kod, her ikisi de göstermektedir.


Imports System.IO ' File, FileStream, StreamWriter
Imports System.IO.IsolatedStorage ' IsolatedStorageFile
Imports System.Security ' CodeAccesPermission
Imports System.Security.Permissions ' FileIOPermission, FileIOPermissionAccess
Imports System.Windows ' MessageBox

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
using System.IO; // File, FileStream, StreamWriter
using System.IO.IsolatedStorage; // IsolatedStorageFile
using System.Security; // CodeAccesPermission
using System.Security.Permissions; // FileIOPermission, FileIOPermissionAccess
using System.Windows; // MessageBox

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;
            }
        }



...


    }
}

Çoğu durumda, kısmi güven alternatifi bulmak mümkün olmalıdır.

Bir intranet gibi denetimli bir ortamda özel yönetilen çerçeveleri içine temel istemci üzerinden yüklenebilir 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şvuru AllowPartiallyTrustedCallersAttribute (daha fazla bilgi için bkz: Güvenlik (WPF) ve WPF Güvenlik Stratejisi - Platform Güvenliği).

Tarayıcı ana algılama

Kullanarak CAS denetlemeye yönelik izinleri olan uygun bir teknik, gerek duyduğunuz denetleme izni temel. Bu teknik iþleyicisinden sonraki özel durumlara normal bir parçası olarak işlem bağlı olsa da, genel olarak önerilmez ve performans sorunları olabilir. Bunun yerine, sizin XAML browser application (XBAP) Internet bölgesi sandbox içinde yalnızca çalışır, kullanabileceğiniz BrowserInteropHelper.IsBrowserHosted özelliği, kendisi için doğru verir XAML browser applications (XBAPs).

NotNot

IsBrowserHostedyalnızca bir uygulama değil hangi uygulama izin kümesi ile çalışan bir tarayıcıda çalışan olup olmadığını ayırt eder.

Managing Permissions

Varsayılan olarak, XBAPs kısmi güven (varsayılan Internet bölgesi izin kümesi) çalıştırmak. Ancak, uygulamanın gereksinimlerine bağlı olarak, varsayılan izinler kümesi değiştirmek mümkündür. Örneğin, bir XBAPs başlatılan yerel intranet bağlantısını, aşağıdaki tablo. gösterilen bir artmasına izin kümesi yararlanabilirsiniz

Table 3: LocalIntranet ve Internet izinleri

Permission

Attribute

LocalIntranet

Internet

DNS

Access dns sunucuları

Yes

No

Environment Variables

Read

Yes

No

Dosya iletişim kutuları

Open

Yes

Yes

Dosya iletişim kutuları

Sınırsız

Yes

No

Isolated Storage

Kullanıcı tarafından derleme yalıtım

Yes

No

Isolated Storage

Bilinmeyen yalıtım

Yes

Yes

Isolated Storage

Sınırsız kullanıcı kotası

Yes

No

Media

Güvenli ses, video ve resimleri

Yes

Yes

Printing

Varsayılan yazdırma

Yes

No

Printing

Güvenli Yazdırma

Yes

Yes

Reflection

Yayımla

Yes

No

Security

Yönetilen kod yürütme

Yes

Yes

Security

İzin verilenler onaylama

Yes

No

User Interface

Sınırsız

Yes

No

User Interface

Güvenli üst düzey windows

Yes

Yes

User Interface

Kendi Pano

Yes

Yes

Web Browser

html için güvenli gezintiyi

Yes

Yes

NotNot

Kes ve Yapıştır yalnızca izin kısmi güvende kullanıcı başlattığında.

İzinleri artırmak gerekiyorsa, proje ayarlarını ve ClickOnce uygulama bildirimi değiştirmeniz gerekir. For more information, see WPF XAML Tarayıcı Uygulamalarına Genel Bakış. Aşağıdaki belgeler de yararlı olabilir.

Yoksa sizin XBAP tam güven gerektiren istenen izinleri. artırmak için aynı araçları kullanabilirsiniz Ancak bir XBAP yalnızca alacak tam güven, yüklü ve başlatılan intranet, yerel bilgisayardan veya bir url listelenen, tarayıcının güvenilen veya izin verilen siteler. Uygulama intranet veya güvenilen bir site yüklediyseniz, kullanıcının yükseltilmiş izinler bildiren standart ClickOnce istemi alırsınız. Kullanıcı, devam veya yüklemeyi iptal etmeyi seçebilirsiniz.

Alternatif olarak, herhangi bir güvenlik bölgesinden tam güven dağıtımı için ClickOnce güvenilir dağıtım modelini kullanabilirsiniz. For more information, see Güvenilir Uygulama Dağıtımına Genel Bakış and Güvenlik (WPF).

Ayrıca bkz.

Kavramlar

Güvenlik (WPF)

WPF Güvenlik Stratejisi - Platform Güvenliği

WPF Güvenlik Stratejisi - Güvenlik Mühendisliği