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

Genel olarak, kötü amaçlı hasar engellemek için Internet uygulamalarının kritik sistem kaynaklarına doğrudan erişimi olması kısıtlanmalıdır. Varsayılan olarak, HTML ve istemci tarafı komut dosyası dilleri kritik sistem kaynaklarına erişemez. Windows Presentation Foundation (WPF) tarayıcıda barındırılan uygulamalar tarayıcıdan başlatılabildiğinden, benzer bir kısıtlama kümesine uymalıdır. bu kısıtlamaları zorlamak için WPF hem kod erişim güvenliği (CAS) hem de ClickOnce kullanır (bkz. wpf güvenlik stratejisi-Platform güvenliği). Varsayılan olarak, tarayıcıda barındırılan uygulamalar Internet, yerel intranet veya yerel bilgisayar tarafından başlatıldıklarından bağımsız olarak Internet bölgesi CA 'ları izin kümesi ister. Tüm izin kümesinden daha az bir şekilde çalışan uygulamalar kısmi güvenle çalışıyor olarak kabul edilir.

WPF, olabildiğince fazla işlevselliğin kısmi güvende güvenli bir şekilde kullanılabileceği ve CA 'ların yanı sıra, kısmi güven programlama için ek destek sağlayan çok çeşitli destek sağlar.

Bu konu aşağıdaki bölümleri içermektedir:

WPF özelliği kısmi güven desteği

aşağıdaki tabloda, ınternet bölgesi izin kümesi sınırları içinde kullanılmak üzere güvenli olan Windows Presentation Foundation (WPF) üst düzey özellikleri listelenmektedir.

tablo 1: kısmi güvende Kasa WPF özellikleri

Özellik alanı Özellik
Genel Tarayıcı penceresi

Kaynak erişimi sitesi

IsolatedStorage (512KB sınırı)

UIAutomation sağlayıcıları

Verme

Giriş Yöntemi Düzenleyicileri (IME'ler)

Tablet ekran kalemi ve mürekkep

Fare yakalama ve taşıma olayları kullanılarak sanal sürükleyip bırakma

OpenFileDialog

XAML serisini kaldırma (XamlReader. Load aracılığıyla)
Web tümleştirmesi Tarayıcı Indirme Iletişim kutusu

Top-Level User-Initiated gezintisi

mailto: bağlantılar

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

HTTPWebRequest

IFRAME 'de barındırılan WPF Içeriği

Çerçeve kullanarak Same-Site HTML sayfaları barındırma

WebBrowser kullanarak aynı site HTML sayfalarının barındırılması

Web Hizmetleri (ASMX)

Web hizmetleri (Windows Communication Foundation kullanarak)

Betik Oluşturma

Belge Nesne Modeli
Görseller 2B ve 3B

Animasyon

Medya (kaynak ve etki alanları arası)

Görüntü/ses/video
Okunanlar FlowDocuments

XPS belgeleri

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

CFF & TrueType yazı tipleri
Düzenleme Yazım denetimi

RichTextBox

Düz metin ve mürekkep panosu desteği

User-Initiated Yapıştır

Seçili Içerik kopyalanıyor
Denetimler Genel denetimler

Bu tablo, WPF özelliklerini yüksek düzeyde ele alır. daha ayrıntılı bilgi için Windows SDK WPF içindeki her üye için gereken izinleri belgelemektedir. Ayrıca, aşağıdaki özellikler, kısmi güven yürütme ile ilgili özel konular da dahil olmak üzere daha ayrıntılı bilgiler sunar.

Aşağıdaki tabloda Internet bölgesi izin kümesi sınırları içinde çalıştırılması güvenli olmayan WPF özellikleri özetlenmektedir.

tablo 2: kısmi güvende Kasa olmayan WPF özellikleri

Özellik alanı Özellik
Genel pencere (uygulama tanımlı Windows ve iletişim kutuları)

SaveFileDialog

Dosya Sistemi

Kayıt defteri erişimi

Sürükleme ve Bırakma

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

UIAutomation Istemcileri

Kaynak pencere erişimi (HwndHost)

Tam konuşma desteği

Windows Forms birlikte çalışabilirlik
Görseller Bit Eşlem Efektleri

Görüntü kodlama
Düzenleme Zengin metin biçimi panosu

Tam XAML desteği

Kısmi güven programlama

XBAP uygulamaları için, varsayılan izin kümesini aşan kod, güvenlik bölgesine bağlı olarak farklı davranışa sahip olur. Bazı durumlarda, Kullanıcı yüklemeyi denediklerinde bir uyarı alır. Kullanıcı devam etmeyi seçebilir veya yüklemeyi iptal edebilir. Aşağıdaki tabloda her güvenlik bölgesi için uygulamanın davranışı ve uygulamanın tam güven alması için yapmanız gerekenler açıklanmaktadır.

Güvenlik Bölgesi Davranış Tam güven alma
Yerel bilgisayar Otomatik tam güven Eylem gerekmiyor.
Intranet ve güvenilen siteler Tam güven iste Kullanıcının istemde kaynağı görmesi için XBAP 'yi bir sertifikayla imzalayın.
İnternet "Güven verilmedi" ile başarısız olur XBAP 'yi bir sertifikayla imzalayın.

Not

önceki tabloda açıklanan davranış, ClickOnce güvenilen dağıtım modelini takip eden tam güven xbap 'ler içindir.

Genel olarak, izin verilen izinleri aşabilir kod büyük olasılıkla hem tek başına hem de tarayıcıda barındırılan uygulamalar arasında paylaşılan ortak koddur. CAS ve WPF, bu senaryonun yönetilmesi için çeşitli teknikler sunmaktadır.

CA 'ları kullanarak Izinleri algılama

Bazı durumlarda, kitaplık derlemelerindeki paylaşılan kodun hem tek başına uygulamalar hem de XBAP 'ler tarafından kullanılabilmesi mümkündür. Bu durumlarda kod, uygulamanın verilen izin kümesinden izin verdiğinden daha fazla izin gerektirebilecek işlevselliği yürütebilir. uygulamanız, Microsoft .NET Framework security kullanarak belirli bir izne sahip olup olmadığını algılayabilir. Özellikle, Demand istenen iznin örneğinde yöntemini çağırarak belirli bir izne sahip olup olmadığını test edebilir. Bu, bir dosyayı yerel diske kaydetme yeteneğine sahip olup olmadığını sorgulayan kodu içeren aşağıdaki örnekte gösterilmiştir:

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 uygulamada istenen izin yoksa, çağrısı Demand bir güvenlik özel durumu oluşturur. Aksi takdirde, izin verildi. IsPermissionGranted Bu davranışı kapsüller ve truefalse uygun şekilde döndürür.

Işlevsellikten oluşan düzgün düşme

Kodun, farklı bölgelerde yürütülebilecek kod için ne yapılması gerektiğini belirlemek için gereken izne sahip olup olmadığını tespit edebilirsiniz. Bölgenin bir şeyi algılarken, mümkünse Kullanıcı için bir alternatif sağlamak daha iyi bir seçenektir. Örneğin, bir tam güven uygulaması genellikle kullanıcıların istedikleri yerde dosya oluşturmasını sağlar, ancak kısmi bir güven uygulaması yalnızca yalıtılmış depolamada dosya oluşturabilir. Hem tam güven (tek başına) uygulamalar hem de kısmi güven (tarayıcı tarafından barındırılan) uygulamaları tarafından paylaşılan bir derlemede bir dosya oluşturmak için kod varsa ve her iki uygulama da kullanıcıların dosya oluşturabilmesini istiyorsanız, paylaşılan kod uygun konumda bir dosya oluşturmadan önce kısmi veya tam güvende çalışıp çalışmadığını tespit etmelidir. Aşağıdaki kod her ikisini de göstermektedir.

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 bir güvenin alternatif olarak bulunması gerekir.

İntranet gibi denetlenen bir ortamda, özel yönetilen çerçeveler, genel derleme önbelleği 'ne (GAC) istemci tabanı üzerinden yüklenebilir. Bu kitaplıklar, tam güven gerektiren ve yalnızca kullanarak kısmi güvenle izin verilen uygulamalardan başvurulabilen kodu yürütebilir AllowPartiallyTrustedCallersAttribute (daha fazla bilgi için bkz. AllowPartiallyTrustedCallersAttribute ve WPF Güvenlik Stratejisi-Platform güvenliği).

Tarayıcı ana bilgisayar algılama

İzinleri denetlemek için CAS kullanılması, izin temelinde denetim yapmanız gerektiğinde uygun bir tekniktir. Bu teknik, genel olarak önerilmeyen ve performans sorunlarına sahip olabilen normal işlemenin bir parçası olarak özel durumları yakalama konusuna bağımlıdır. Bunun yerine, XAML tarayıcı uygulamanız (XBAP) yalnızca Internet bölgesi korumalı alanında çalışıyorsa, BrowserInteropHelper.IsBrowserHosted XAML tarayıcı uygulamaları (XBAP) için doğru döndüren özelliğini kullanabilirsiniz.

Not

IsBrowserHosted yalnızca bir uygulamanın bir tarayıcıda çalışıp çalışmadığını ayırt eder, bu, bir uygulamanın hangi izin kümesiyle çalıştığını belirtir.

Izinleri yönetme

Varsayılan olarak, XBAP kısmi güvenle çalışır (varsayılan Internet bölgesi izin kümesi). Ancak, uygulamanın gereksinimlerine bağlı olarak, varsayılan olarak izin kümesini değiştirmek mümkündür. Örneğin, bir XBAP yerel intranetten başlatılmışsa, aşağıdaki tabloda gösterilen daha yüksek bir izin kümesinden yararlanabilir.

Tablo 3: LocalIntranet ve Internet Izinleri

İzin Öznitelik Yerel Intranet İnternet
DNS DNS sunucularına erişme Yes Hayır
Ortam Değişkenleri Okuma Yes Hayır
Dosya Iletişimleri Yes Yes
Dosya Iletişimleri Sınırsız Yes Hayır
Yalıtılmış Depolama Kullanıcıya göre derleme yalıtımı Yes Hayır
Yalıtılmış Depolama Bilinmeyen yalıtım Yes Yes
Yalıtılmış Depolama Sınırsız Kullanıcı kotası Yes Hayır
Medya ses, video ve görüntü Kasa Yes Yes
Yazdırma Varsayılan yazdırma Yes Hayır
Yazdırma Kasa yazdırma Yes Yes
Yansıma Pdb Yes Hayır
Güvenlik Yönetilen kod yürütme Yes Yes
Güvenlik İzin verilen izinler Yes Hayır
Kullanıcı Arabirimi Sınırsız Yes Hayır
Kullanıcı Arabirimi Kasa üst düzey pencereler Yes Yes
Kullanıcı Arabirimi Kendi Pano Yes Yes
Web Tarayıcısı Kasa HTML'ye çerçeve gezintisi Yes Yes

Not

Kes ve Yapıştır yalnızca kullanıcı başlattığında kısmi güven içinde izin verilir.

İzinleri artırmaya ihtiyacınız varsa proje ayarlarını ve uygulama bildirimini ClickOnce gerekir. Daha fazla bilgi için bkz. WPF XAML Tarayıcı Uygulamalarına Genel Bakış. Aşağıdaki belgeler de yararlı olabilir.

XBAP'niz tam güven gerektiriyorsa, istenen izinleri artırmak için aynı araçları kullanabilirsiniz. Bir XBAP yalnızca yerel bilgisayarda, intranette veya tarayıcının güvenilen veya izin verilen sitelerinde listelenen bir URL'den yüklenir ve bu bilgisayardan açılırsa tam güven alır. Uygulama intranetten veya güvenilen bir siteden yüklenirse, kullanıcı yükseltilmiş izinler hakkında ClickOnce için standart uyarıyı alır. Kullanıcı devam edebilir veya yükleme işlemini iptal edebilir.

Alternatif olarak, herhangi bir güvenlik ClickOnce tam güven dağıtımı için güvenli dağıtım modelini kullanabilirsiniz. Daha fazla bilgi için bkz. Güvenilen Uygulama Dağıtımına Genel Bakış ve Güvenlik.

Ayrıca bkz.