WPF Kısmi Güven Güvenliği
Genel olarak, kötü amaçlı hasarı önlemek için İnternet uygulamalarının kritik sistem kaynaklarına doğrudan erişimi kısıtlanmalıdır. Varsayılan olarak, HTML ve istemci tarafı betik dilleri kritik sistem kaynaklarına erişemez. Windows Presentation Foundation (WPF) tarayıcı tarafından barındırılan uygulamalar tarayıcıdan başlatılabildiğinden, benzer bir kısıtlama kümesine uymaları gerekir. Bu kısıtlamaları uygulamak için WPF hem Kod Erişim Güvenliği 'ne (CAS) hem de ClickOnce'a dayanır (bkz . WPF Güvenlik Stratejisi - Platform Güvenliği). Varsayılan olarak, tarayıcı tarafından barındırılan uygulamalar İnternet'ten mi, yerel intranetten mi yoksa yerel bilgisayardan mı başlatıldıklarından bağımsız olarak İnternet bölgesi CAS izin kümesini ister. Tam izin kümesinden daha azıyla çalışan uygulamaların kısmi güvenle çalıştığı söylenir.
WPF, kısmi güvende mümkün olduğunca çok işlevin güvenli bir şekilde kullanılabilmesini sağlamak için çok çeşitli destek sağlar ve CAS ile birlikte kısmi güven programlama için ek destek sağlar.
Bu konu, aşağıdaki bölümleri içerir:
WPF Özelliği Kısmi Güven Desteği
Aşağıdaki tabloda, Windows Presentation Foundation'ın (WPF) İnternet bölgesi izin kümesinin sınırları içinde kullanımı güvenli olan üst düzey özellikleri listelenmiştir.
Tablo 1: Kısmi Güvende Güvenli OLAN WPF Özellikleri
Özellik Alanı | Özellik |
---|---|
Genel | Tarayıcı Penceresi Kaynak Sitesi Erişimi IsolatedStorage (512 KB Sınırı) UIAutomation Sağlayıcıları Komuta Giriş Yöntemi Düzenleyicileri (IME'ler) Tablet Ekran Kalemi ve Mürekkep Fare Yakalama ve Taşıma Olaylarını Kullanarak Sanal Sürükleme/Bırakma OpenFileDialog XAML Seri Durumdan Çıkarma (XamlReader.Load aracılığıyla) |
Web Tümleştirmesi | Tarayıcı İndirme İletişim Kutusu Üst Düzey Kullanıcı Tarafından Başlatılan Gezinti mailto:links Tekdüzen Kaynak Tanımlayıcı Parametreleri HTTPWebRequest IFRAME'de Barındırılan WPF İçeriği Çerçeve Kullanarak Aynı Site HTML Sayfalarını Barındırma WebBrowser kullanarak Aynı Site HTML Sayfalarını Barındırma Web Hizmetleri (ASMX) Web Hizmetleri (Windows Communication Foundation kullanarak) Komut dosyası Belge Nesne Modeli |
Görseller | 2B ve 3B Animasyon Medya (Kaynak ve Etki Alanları Arası Site) Görüntüleme/Ses/Video |
Okunanlar | FlowDocuments XPS Belgeleri Katıştırılmış ve Sistem Yazı Tipleri CFF & TrueType Yazı Tipleri |
Düzenleniyor | Yazım Denetimi RichTextBox Düz Metin ve Mürekkep Panosu Desteği Kullanıcı Tarafından Başlatılan Yapıştırma Seçili İçeriği Kopyalama |
Denetimler | Genel Denetimler |
Bu tablo, WPF özelliklerini üst düzeyde kapsar. Daha ayrıntılı bilgi için, Windows SDK'sı WPF'deki her üyenin gerektirdiği izinleri belgeler. Ayrıca, aşağıdaki özelliklerin kısmi güven yürütmeyle ilgili daha ayrıntılı bilgileri vardır ve özellikle dikkat edilmesi gerekenler de vardır.
XAML (bkz. WPF'de XAML).
Açılan pencereler (bkz System.Windows.Controls.Primitives.Popup. ).
Sürükle ve Bırak (bkz . Sürükleme ve Bırakma Genel Bakış).
Pano (bkz System.Windows.Clipboard. ).
Görüntüleme (bkz System.Windows.Controls.Image. ).
Serileştirme (bkz. XamlReader.Load, XamlWriter.Save).
Dosya İletişim Kutusunu Aç (bkz Microsoft.Win32.OpenFileDialog. ).
Aşağıdaki tabloda, İnternet bölgesi izin kümesinin sınırları içinde çalıştırılması güvenli olmayan WPF özellikleri özetlenmiştir.
Tablo 2: Kısmi Güvende Güvenli Olmayan WPF Özellikleri
Özellik Alanı | Özellik |
---|---|
Genel | Pencere (Uygulama Tanımlı Pencereler ve İletiş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 İstemcileri Kaynak Pencere Erişimi (HwndHost) Tam Konuşma Desteği Windows Forms Birlikte Çalışabilirliği |
Görseller | Bit Eşlem Efektleri Görüntü Kodlama |
Düzenleniyor | 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ışlara sahip olur. Bazı durumlarda, kullanıcı yüklemeyi denediğinde bir uyarı alır. Kullanıcı yüklemeye devam etmeyi veya yüklemeyi iptal etmeyi seçebilir. Aşağıdaki tabloda, uygulamanın her güvenlik bölgesi için davranışı ve uygulamanın tam güven alması için yapmanız gerekenler açıklanmaktadır.
Uyarı
XBAP'ler, Internet Explorer ve Firefox'un eski sürümleri gibi eski tarayıcıların çalıştırılmasını gerektirir. Bu eski tarayıcılar genellikle Windows 10 ve Windows 11'de desteklenmez. Modern tarayıcılar artık güvenlik riskleri nedeniyle XBAP uygulamaları için gereken teknolojiyi desteklemiyor. XBAP'leri etkinleştiren eklentiler artık desteklenmemektedir. Daha fazla bilgi için bkz . WPF tarayıcı tarafından barındırılan uygulamalar (XBAP) hakkında sık sorulan sorular.
Güvenlik Bölgesi | Davranış | Tam Güven Alma |
---|---|---|
Yerel bilgisayar | Otomatik tam güven | Eylem gerekmiyor. |
İntranet ve güvenilen siteler | Tam güven iste | Kullanıcının isteminde kaynağı görmesi için XBAP'yi bir sertifikayla imzalayın. |
İnternet | "Güven Verilmedi" ile başarısız oluyor | XBAP'yi bir sertifikayla imzalayın. |
Not
Önceki tabloda açıklanan davranış, ClickOnce Güvenilen Dağıtım modelini izlemeyen tam güven XBAP'leri içindir.
Genel olarak, izin verilen izinleri aşabilecek kod, hem tek başına hem de tarayıcıda barındırılan uygulamalar arasında paylaşılan yaygın kod olabilir. CAS ve WPF, bu senaryoyı yönetmek için çeşitli teknikler sunar.
CAS Kullanarak İzinleri Algılama
Bazı durumlarda, kitaplık derlemelerindeki paylaşılan kodun hem tek başına uygulamalar hem de XBAP'ler tarafından kullanılması mümkündür. Bu durumlarda kod, uygulamanın verilen izin kümesinin izin verdiğinden daha fazla izin gerektirebilecek işlevleri yürütebilir. Uygulamanız, Microsoft .NET Framework güvenliğini kullanarak belirli bir izne sahip olup olmadığını algılayabilir. Özellikle, istenen iznin örneğinde yöntemini çağırarak Demand belirli bir izne sahip olup olmadığını test edebilir. Bu, bir dosyayı yerel diske kaydedip kaydetmediğini sorgulayan kodun bulunduğu 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 uygulama istenen izne sahip değilse çağrısı Demand bir güvenlik özel durumu oluşturur. Aksi takdirde, izin verilmiştir. IsPermissionGranted
bu davranışı kapsüller ve veya false
uygun şekilde döndürürtrue
.
İşlevselliği Düzgün Bir Şekilde Düşürme
Kodun yapması gereken işlemi yapma iznine sahip olup olmadığını algılamak, farklı bölgelerden yürütülebilen kodlar için ilginçtir. Bölgeyi algılamak bir şey olsa da, mümkünse kullanıcıya bir alternatif sağlamak çok daha iyidir. Örneğin, tam güven uygulaması genellikle kullanıcıların istedikleri yerde dosya oluşturmasına olanak tanırken, kısmi güven uygulaması yalnızca yalıtılmış depolamada dosya oluşturabilir. Dosya oluşturma kodu 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 varsa ve her iki uygulama da kullanıcıların dosya oluşturabilmesini istiyorsa, paylaşılan kod uygun konumda bir dosya oluşturmadan önce dosyanın kısmi veya tam güven içinde çalışıp çalışmadığını algılamalıdır. Aşağıdaki kod her ikisini de gösterir.
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üven alternatifi bulabilmeniz gerekir.
İntranet gibi denetimli bir ortamda, istemci tabanında genel derleme önbelleğine (GAC) özel yönetilen çerçeveler yüklenebilir. Bu kitaplıklar tam güven gerektiren kod yürütebilir ve kullanarak AllowPartiallyTrustedCallersAttribute yalnızca kısmi güvene izin verilen uygulamalardan başvurulabilir (daha fazla bilgi için bkz . Güvenlik ve WPF Güvenlik Stratejisi - Platform Güvenliği).
Tarayıcı Ana Bilgisayar Algılama
İzinleri denetlemek için CAS kullanmak, izin başına denetlemeniz gerektiğinde uygun bir tekniktir. Ancak bu teknik, genel olarak önerilmez ve performans sorunlarına neden olabilecek normal işlemenin bir parçası olarak özel durumları yakalamaya bağlıdır. Bunun yerine, XAML tarayıcı uygulamanız (XBAP) yalnızca İnternet bölgesi korumalı alanında çalışıyorsa, XAML tarayıcı uygulamaları (XBAP) için true değerini döndüren özelliğini kullanabilirsiniz BrowserInteropHelper.IsBrowserHosted .
Uyarı
XBAP'ler, Internet Explorer ve Firefox'un eski sürümleri gibi eski tarayıcıların çalıştırılmasını gerektirir. Bu eski tarayıcılar genellikle Windows 10 ve Windows 11'de desteklenmez. Modern tarayıcılar artık güvenlik riskleri nedeniyle XBAP uygulamaları için gereken teknolojiyi desteklemiyor. XBAP'leri etkinleştiren eklentiler artık desteklenmemektedir. Daha fazla bilgi için bkz . WPF tarayıcı tarafından barındırılan uygulamalar (XBAP) hakkında sık sorulan sorular.
Not
IsBrowserHosted yalnızca bir uygulamanın çalıştığı izin kümesini değil, tarayıcıda çalışıp çalışmadığını ayırt eder.
İzinleri Yönetme
Varsayılan olarak, XBAP'ler kısmi güvenle (varsayılan İnternet bölgesi izin kümesi) çalışır. Ancak, uygulamanın gereksinimlerine bağlı olarak, izin kümesini varsayılandan değiştirmek mümkündür. Örneğin, yerel intranetten bir XBAP başlatılırsa, aşağıdaki tabloda gösterilen artırılmış izin kümesinden yararlanabilir.
Uyarı
XBAP'ler, Internet Explorer ve Firefox'un eski sürümleri gibi eski tarayıcıların çalıştırılmasını gerektirir. Bu eski tarayıcılar genellikle Windows 10 ve Windows 11'de desteklenmez. Modern tarayıcılar artık güvenlik riskleri nedeniyle XBAP uygulamaları için gereken teknolojiyi desteklemiyor. XBAP'leri etkinleştiren eklentiler artık desteklenmemektedir. Daha fazla bilgi için bkz . WPF tarayıcı tarafından barındırılan uygulamalar (XBAP) hakkında sık sorulan sorular.
Tablo 3: LocalIntranet ve İnternet İzinleri
İzin | Öznitelik | LocalIntranet | İnternet |
---|---|---|---|
DNS | DNS sunucularına erişme | Yes | Hayır |
Ortam Değişkenleri | Okundu | Yes | Hayır |
Dosya İletişim Kutuları | Açılış | Yes | Yes |
Dosya İletişim Kutuları | 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 | Güvenli ses, video ve görüntüler | Yes | Yes |
Yazdırma | Varsayılan yazdırma | Yes | Hayır |
Yazdırma | Güvenli yazdırma | Yes | Yes |
Yansıma | Emit | Yes | Hayır |
Güvenlik | Yönetilen kod yürütme | Yes | Evet |
Güvenlik | Onay verilen izinler | Yes | Hayır |
Kullanıcı Arabirimi | Sınırsız | Yes | Hayır |
Kullanıcı Arabirimi | Güvenli üst düzey pencereler | Yes | Yes |
Kullanıcı Arabirimi | Kendi Panosu | Yes | Yes |
Web Tarayıcısı | HTML'ye güvenli çerçeve gezintisi | Yes | Evet |
Not
Kes ve Yapıştır'a yalnızca kullanıcı başlatıldığında kısmi güvende izin verilir.
İzinleri artırmanız gerekiyorsa, proje ayarlarını ve ClickOnce uygulama bildirimini değiştirmeniz gerekir. Daha fazla bilgi için bkz . WPF XAML Tarayıcı Uygulamalarına Genel Bakış. Aşağıdaki belgeler de yararlı olabilir.
MageUI.exe (Bildirim Oluşturma ve Düzenleme Aracı, Grafik İstemci).
ClickOnce Uygulamalarının Güvenliğini Sağlama.
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'de yüklü ve başlatılmışsa tam güven alır. Uygulama intranetten veya güvenilen bir siteden yüklenirse, kullanıcı yükseltilmiş izinleri bildiren standart ClickOnce istemini alır. Kullanıcı yüklemeye devam etmeyi veya yüklemeyi iptal etmeyi seçebilir.
Alternatif olarak, herhangi bir güvenlik bölgesinden tam güven dağıtımı için ClickOnce Güvenilen 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.
.NET Desktop feedback