Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
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.
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.
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
Uyarı
Kod Erişim Güvenliği (CAS) modern .NET tarafından desteklenmez, yalnızca .NET Framework kavramıdır. CAS ile ilgili tüm işlevler tam güven varsayımı altında ele alır. Daha fazla bilgi için bkz. WPF .NET ile Farklılıklar - Kod Erişim Güvenliğ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 Menşei Siteye Erişim IsolatedStorage (512 KB Sınırı) UIAutomation Sağlayıcıları Komuta etme Giriş Yöntemi Düzenleyicileri (IMI'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 Penceresi Top-Level User-Initiated Navigasyon mailto: bağlantılar Tekdüzen Kaynak Tanımlayıcı Parametreleri HTTPWebRequest IFRAME'de Barındırılan WPF İçeriği Çerçeve Kullanarak Same-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) Betik Yazma Belge Nesne Modeli (DOM) |
Görsel | 2D ve 3D Animasyon Medya (Kaynak Site ve Alanlar Arası) Görüntüleme/Ses/Video |
Okuma | FlowDocuments XPS Belgeleri Katıştırılmış ve 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 İç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ı) DosyaKaydetmeDiyalog Dosya Sistemi Kayıt Defteri Erişimi Sürükle ve Bırak 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örsel | 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ış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 gerekmez. |
İntranet ve güvenilen siteler | Tam güvenlik onayı 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. |
Uyarı
Ö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 olarak, istenen iznin örneği üzerinde Demand metodunu çağırarak 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, Demand çağrısı bir güvenlik istisnası oluşturur. Aksi takdirde, izin verilmiştir.
IsPermissionGranted
bu davranışı kapsüller ve uygun olduğunda true
veya false
'yi döndürür.
İşlevselliğin Kademeli Zayıflaması
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ı Sunucu Algılama
İzinleri denetlemek için CAS kullanmak, izin başına denetlemeniz gerektiğinde uygun bir tekniktir. Bu teknik, normal işlemenin bir parçası olarak, özel durumları yakalamaya bağlıdır, ancak genel olarak önerilmez ve performans sorunlarına neden olabilir. Bunun yerine, XAML tarayıcı uygulamanız (XBAP) yalnızca İnternet bölgesi korumalı alanında çalışıyorsa, BrowserInteropHelper.IsBrowserHosted özelliğini kullanabilirsiniz, bu özellik XAML tarayıcı uygulamaları (XBAP) için true değerini döndürü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.
Uyarı
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 | Özellik | LocalIntranet | İnternet |
---|---|---|---|
Alan Adı Sistemi (DNS) | DNS sunucularına erişme | Evet | Hayı |
Ortam Değişkenleri | Okumak | Evet | Hayı |
Dosya İletişim Kutuları | Açık | Evet | Evet |
Dosya İletişim Kutuları | Sınırsız | Evet | Hayı |
Yalıtılmış Depolama | Kullanıcıya göre derleme yalıtımı | Evet | Hayı |
Yalıtılmış Depolama | Bilinmeyen izolasyon | Evet | Evet |
Yalıtılmış Depolama | Sınırsız kullanıcı kotası | Evet | Hayı |
Medya | Güvenli ses, video ve görüntüler | Evet | Evet |
Baskı | Varsayılan yazdırma | Evet | Hayı |
Baskı | Güvenli yazdırma | Evet | Evet |
Yansıma | Emit | Evet | Hayı |
Güvenlik | Yönetilen kod yürütme | Evet | Evet |
Güvenlik | Tanınmış izinleri doğrula | Evet | Hayı |
Kullanıcı Arayüzü | Sınırsız | Evet | Hayı |
Kullanıcı Arayüzü | Güvenli üst düzey pencereler | Evet | Evet |
Kullanıcı Arayüzü | Kendi Panosu | Evet | Evet |
Web tarayıcısı | HTML'ye güvenli çerçeve gezintisi | Evet | Evet |
Uyarı
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.
XBAP'niz tam güven gerektiriyorsa, istenen izinleri artırmak için aynı araçları kullanabilirsiniz. Bir XBAP, yalnızca yerel bilgisayara veya intranete yüklendiğinde ve oradan başlatıldığında ya da tarayıcının güvenilen veya izin verilen sitelerinde listelenen bir URL'den başlatıldığında tam güven verir. 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 bakınız
- Güvenlik
- WPF Güvenlik Stratejisi - Platform Güvenliği
- WPF Güvenlik Stratejisi - Güvenlik Mühendisliği
.NET Desktop feedback