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.
XAML(bkz: XAML'e Genel Bakış (WPF)).
Popups (bkz: System.Windows.Controls.Primitives.Popup).
Sürükle ve bırak (bkz: Sürükle ve Bırak'a Genel Bakış).
Pano (bkz: System.Windows.Clipboard).
Imaging (bkz: System.Windows.Controls.Image).
Seri hale getirme (bkz: XamlReader.Load, XamlWriter.Save).
Dosya iletişim kutusunu açın (bkz: Microsoft.Win32.OpenFileDialog).
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. |
Not |
---|
Ö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).
Not |
---|
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 |
Not |
---|
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).