Güvenlik (WPF)
Windows Presentation Foundation (WPF) tek başına ve tarayıcıda barındırılan uygulamalar geliştirirken güvenlik modelini dikkate almanız gerekir. WPF tek başına uygulamaları, Windows Installer (.msi), XCopy veya ClickOnce kullanılarak dağıtılıp dağıtılmadığı, kısıtlanmamış izinlerle (CASFullTrust izin kümesi) yürütülür. ClickOnce ile kısmi güven kullanan bağımsız WPF uygulamalarının dağıtımı desteklenmez. Ancak, tam güvenli bir konak uygulaması, .NET Framework Eklenti modelini kullanarak kısmi güvenli bir AppDomain oluşturabilir. Daha fazla bilgi için bkz. WPF Add-Ins Genel Bakış.
WPF tarayıcı tarafından barındırılan uygulamalar Windows Internet Explorer veya Firefox tarafından barındırılır ve XAML tarayıcı uygulamaları (XBAP' ler) veya gevşek Genişletilebilir Uygulama Biçimlendirme Dili (XAML) belgeleri olabilir. Daha fazla bilgi için bkz. WPF XAML Tarayıcı Uygulamalarına Genel Bakış
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 tarayıcı barındırmalı uygulamalar, varsayılan olarak, varsayılan CASsınırlı İnternet bölgesi izin kümesi ile kısmi güven güvenlik korumalı alanı içinde çalıştırılır. Bu, WPF tarayıcı tarafından barındırılan uygulamaları istemci bilgisayardan, normal Web uygulamalarının yalıtılmış olmasını beklediğiniz şekilde etkili bir şekilde yalıtıyor. XBAP, dağıtım URL'sinin güvenlik bölgesine ve istemcinin güvenlik yapılandırmasına bağlı olarak Tam Güven'e kadar ayrıcalıkları yükseltebilir. Daha fazla bilgi için bkz. WPF Kısmi Güvenilirlik Güvenliği.
Bu konu başlığında, windows presentation foundation (WPF) tek başına ve tarayıcıda barındırılan uygulamalar için güvenlik modeli açıklanmaktadır.
Bu konu aşağıdaki bölümleri içerir:
Web Tarayıcı Yazılımı Güvenlik Ayarları
Kısmen Güvenilen İstemci Uygulamaları için APTCA Derlemelerini Devre Dışı Bırakma
Güvenliği Teşvik Eden WPF Uygulamaları Geliştirmek İçin Kaynaklar
Güvenli Gezinti
XBAP'ler için WPF iki gezinti türünü ayırt eder: uygulama ve tarayıcı.
Uygulama gezintisi, tarayıcı tarafından barındırılan bir uygulama içindeki içerik öğeleri arasında gezinmedir. Tarayıcı gezinti, tarayıcının içeriğini ve konum URL'sini değiştiren gezintidir. Uygulama gezintisi (genellikle XAML) ile tarayıcı gezintisi (genellikle HTML) arasındaki ilişki aşağıdaki çizimde gösterilmiştir:
Bir XBAP'nin hangi tür içeriğe güvenli bir şekilde gidebileceği, esas olarak uygulama gezintisi mi yoksa tarayıcı gezintisinin mi kullanıldığına bağlı olarak belirlenir.
Uygulama Gezinti Güvenliği
Uygulama gezintisi, dört içerik türünü destekleyen bir paket URI'siyle tanımlanabilirse güvenli kabul edilir:
İçerik Türü | Açıklama | URI Örneği |
---|---|---|
Kaynak | Kaynakderleme türüne sahip bir projeye eklenen dosyalar. | pack://application:,,,/MyResourceFile.xaml |
İçerik | Contentderleme türüne sahip bir projeye eklenen dosyalar. | pack://application:,,,/MyContentFile.xaml |
Kaynak site | Derleme türü Noneolan bir projeye eklenen dosyalar. | pack://siteoforigin:,,,/MySiteOfOriginFile.xaml |
Uygulama kodu | Arka planda derlenmiş kod içeren XAML kaynakları. -veya- Pagederleme türüne sahip bir projeye eklenen XAML dosyaları. |
pack://application:,,,/MyResourceFile
.xaml
|
Not
Uygulama veri dosyaları ve paket URI'leri hakkında daha fazla bilgi için bkz. WPF Uygulama Kaynağı, İçerik ve Veri Dosyaları.
Bu içerik türlerinin dosyalarına kullanıcı veya program aracılığıyla gidebilir:
Kullanıcı Gezinme . Kullanıcı bir Hyperlink öğesine tıklayarak geziniyor.
Programatik Gezinme. Uygulama, örneğin NavigationWindow.Source özelliğini ayarlayarak kullanıcıyı dahil etmeden geziniyor.
Tarayıcı Gezinti Güvenliği
Tarayıcı gezintisi yalnızca aşağıdaki koşullar altında güvenli kabul edilir:
Kullanıcı Gezinme. Kullanıcı, iç içe Framedeğil, ana NavigationWindowiçindeki bir Hyperlink öğesine tıklayarak geziniyor.
Bölgesi. Gidilmekte olan içerik İnternet'te veya yerel intranette bulunur.
Protokolü. Kullanılan protokol ya http, https, dosyaveya mailto.
XBAP bu koşullara uymayan bir şekilde içeriğe gitmeyi denerse, bir SecurityException fırlatılır.
Web'e Gözatma Yazılımı Güvenlik Ayarları
Bilgisayarınızdaki güvenlik ayarları, herhangi bir web tarayıcı yazılımının erişim seviyesini belirler. Web gözatma yazılımı, Internet Explorer ve PresentationHost.exedahil olmak üzere WinINet veya UrlMon API'lerini kullanan tüm uygulama veya bileşenleri içerir.
Internet Explorer, Internet Explorer tarafından veya Internet Explorer'dan yürütülmesine izin verilen işlevleri yapılandırabileceğiniz bir mekanizma sağlar ve aşağıdakileri içerir:
.NET Framework tabanlı bileşenler
ActiveX denetimleri ve eklentileri
İndirmeler
Betik Yazma
Kullanıcı Kimlik Doğrulaması
Bu şekilde güvenlik altına alınabilecek işlevsellik koleksiyonu, Internet, Intranet, Güvenilen Sitelerve Kısıtlanmış Siteler bölgeleri için bölge bazında yapılandırılır. Aşağıdaki adımlarda güvenlik ayarlarınızın nasıl yapılandırıldığı açıklanmaktadır:
Denetim Masasıaçın.
Ağ ve İnternet
'e ve ardından İnternet Seçenekleri 'ne tıklayın.İnternet Seçenekleri iletişim kutusu görüntülenir.
Güvenlik sekmesinde, güvenlik ayarlarını yapılandırmak için bölgeyi seçin.
Özel Düzey düğmesine tıklayın.
Güvenlik Ayarları iletişim kutusu görüntülenir ve seçili bölge için güvenlik ayarlarını yapılandırabilirsiniz.
Not
Internet Explorer'dan Internet Seçenekleri iletişim kutusuna da ulaşabilirsiniz.
Windows Internet Explorer 7'den başlayarak, .NET Framework için özel olarak aşağıdaki güvenlik ayarları eklenmiştir:
Gevşek XAML. Internet Explorer'ın XAML dosyalarına ve gevşek XAML dosyalarına gidip gidemeyeceğini denetler. (Etkinleştir, Devre Dışı Bırak ve İstem seçenekleri).
XAML tarayıcı uygulamaları. Internet Explorer'ın XBAP'lere gidip gitmeyeceğini ve çalıştırıp çalıştıramayacağını denetler. (Etkinleştir, Devre Dışı Bırak ve Sor seçenekleri).
Varsayılan olarak, bu ayarların tümü
Güvenlikle ilgili WPF Kayıt Defteri Ayarları
İnternet Seçenekleri aracılığıyla sağlanan güvenlik ayarlarına ek olarak, aşağıdaki kayıt defteri değerleri bir dizi güvenliğe duyarlı WPF özelliğini seçmeli olarak engellemek için kullanılabilir. Değerler aşağıdaki anahtar altında tanımlanır:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\Windows Presentation Foundation\Features
Aşağıdaki tabloda ayarlanabilen değerler listelemektedir.
Değer Adı | Değer Türü | Değer Verileri |
---|---|---|
XBAPDisallow | REG_DWORD | 1 izin vermemek için; 0 izin vermek için. |
LooseXamlDisallow | REG_DWORD | 1 yasaklamak için; 0 izin vermek için. |
Web Tarayıcı Engelleme | REG_DWORD | 1, izin vermemek için; 0, izin vermek için. |
MedyaSesEngelle | REG_DWORD | 1 yasaklamak için; 0 izin vermek için. |
MedyaGörüntüEngelle | REG_DWORD | 1 izin vermemek için; 0 izin vermek için. |
Medya Videosunu Engelle | REG_DWORD | 1 izin vermemek için; 0 izin vermek için. |
ScriptInteropDisallow | REG_DWORD | 1 engellemek için; 0 izin vermek için. |
WebBrowser Denetimi ve Özellik Denetimleri
WPF WebBrowser denetimi Web içeriğini barındırmak için kullanılabilir. WPF WebBrowser denetimi, temel alınan WebBrowser ActiveX denetimini sarmalar. WPF, güvenilmeyen Web içeriğini barındırmak için WPF WebBrowser denetimini kullandığınızda uygulamanızın güvenliğini sağlamak için bazı destek sağlar. Ancak, bazı güvenlik özelliklerinin WebBrowser denetimi kullanılarak doğrudan uygulamalar tarafından uygulanması gerekir. WebBrowser ActiveX denetimi hakkında daha fazla bilgi için bkz. WebBrowser Denetimine Genel Bakışlar ve Öğreticiler.
Not
Bu bölüm, HTML içeriğine gitmek için WebBrowser kullandığından Frame denetimi için de geçerlidir.
WPF WebBrowser denetimi güvenilmeyen Web içeriğini barındırmak için kullanılıyorsa, uygulamanızın uygulama kodunuzu kötü amaçlı olabilecek HTML betik kodundan yalıtmaya yardımcı olması için kısmi güven AppDomain kullanması gerekir. Bu durum özellikle uygulamanız InvokeScript yöntemini ve ObjectForScripting özelliğini kullanarak barındırılan betikle etkileşimdeyse geçerlidir. Daha fazla bilgi için bkz. WPF Add-Ins Genel Bakış.
Uygulamanız WPF WebBrowser denetimini kullanıyorsa, güvenliği artırmanın ve saldırıları azaltmanın bir diğer yolu da Internet Explorer özellik denetimlerini etkinleştirmektir. Özellik denetimleri, yöneticilerin ve geliştiricilerin Internet Explorer'ın özelliklerini ve WPF WebBrowser denetiminin sarmaladığı WebBrowser ActiveX denetimini barındıran uygulamaları yapılandırmalarına olanak tanıyan Internet Explorer eklemeleridir. Özellik denetimleri CoInternetSetFeatureEnabled işlevi kullanılarak veya kayıt defterindeki değerler değiştirilerek yapılandırılabilir. Özellik denetimleri hakkında daha fazla bilgi için bkz. Özellik Denetimlerine Giriş ve internet özellik denetimleri.
WPF WebBrowser denetimini kullanan tek başına bir WPF uygulaması geliştiriyorsanız WPF, uygulamanız için aşağıdaki özellik denetimlerini otomatik olarak etkinleştirir.
Özellik Denetimi |
---|
FEATURE_MIME_HANDLING |
FEATURE_MIME_SNIFFING |
ÖZELLİK_OBJE_ÖNBELLEKLEME |
FEATURE_SAFE_BINDTOOBJECT |
ÖZELLİK_PENCERE_KISITLAMALARI |
ÖZELLİK_BÖLGE_YÜKSEKLİĞİ |
ÖZELLİK_DOSYA İNDİRMEYİ KISITLA |
FEATURE_RESTRICT_ACTIVEXINSTALL |
EKLENTİ_YÖNETİMİ_ÖZELLİĞİ |
HTTP_KULLANICI_ADI_ŞİFRE_DEVRE_DIŞI_BIRAKMA_OZELLİĞİ |
GÜVENLİKBANDI ÖZELLİĞİ |
FEATURE_UNC_KAYITLI DOSYA KONTROLÜ |
FEATURE_VALIDATE_NAVIGATE_URL |
FEATURE_DISABLE_TELNET_PROTOCOL |
ÖZELLİK_WEBOC_POPUPYÖNETİM |
ESKİ SIKIŞTIRMA ÖZELLİĞİNİ DEVRE DIŞI BIRAKMA |
FEATURE_SSLUX |
Bu özellik denetimleri koşulsuz olarak etkinleştirildiğinden, tam güven uygulaması bu denetimlerden etkilenebilir. Bu durumda, belirli bir uygulama ve barındırmış olduğu içerik için güvenlik riski yoksa ilgili özellik denetimi devre dışı bırakılabilir.
Özellik denetimleri, WebBrowser ActiveX nesnesinin örneğini oluşturan işlem tarafından uygulanır. Bu nedenle, güvenilmeyen içeriğe gidebilen tek başına bir uygulama oluşturuyorsanız, ek özellik denetimlerini etkinleştirmeyi ciddi şekilde düşünmelisiniz.
Not
Bu öneri, MSHTML ve SHDOCVW konak güvenliği için genel önerilere dayanır. Daha fazla bilgi için bkz. MSHTML Ana Bilgisayar Güvenliği SSS: Bölüm I ve MSHTML Ana Bilgisayar Güvenliği SSS: Bölüm II.
Yürütülebilir dosyanız için kayıt defteri değerini 1 olarak ayarlayarak aşağıdaki özellik denetimlerini etkinleştirmeyi göz önünde bulundurun.
Özellik Denetimi |
---|
FEATURE_ACTIVEX_REPURPOSEDETECTION |
FEATURE_BLOCK_LMZ_IMG |
FEATURE_BLOCK_LMZ_OBJECT |
FEATURE_BLOCK_LMZ_SCRIPT |
ÖZELLİK_RESTRICT_RES_TO_LMZ |
FEATURE_RESTRICT_ABOUT_PROTOCOL_IE7 |
ÖZELLİK_UYGULAMA_PROTO_İKAZ_DIYALOGU_GÖSTER |
ÖZELLİK_YERELMAKİNE_KİLİTLEME |
FEATURE_FORCE_ADDR_AND_STATUS |
DOSYA BULUNAMADIĞINDA KISITLI ALAN ÖZELLİĞİ |
Yürütülebilir dosyanız için kayıt defteri değerini 0 olarak ayarlayarak aşağıdaki özellik denetimini devre dışı bırakmayı göz önünde bulundurun.
Özellik Denetimi |
---|
ÖZELLİK_ETKİNLEŞTİR_SCRIPT_YAPIŞTIR_URLACTION_IF_PROMPT |
Windows Internet Explorer'da WPF WebBrowser denetimi içeren bir kısmi güven XAML tarayıcı uygulaması (XBAP) çalıştırırsanız WPF, Internet Explorer işleminin adres alanında WebBrowser ActiveX denetimini barındırıyor. WebBrowser ActiveX denetimi Internet Explorer işleminde barındırıldığından, WebBrowser ActiveX denetimi için Internet Explorer'a yönelik tüm özellik denetimleri de etkinleştirilir.
Internet Explorer'da çalışan XBAP'ler, normal tek başına uygulamalara kıyasla ek bir güvenlik düzeyi de alır. Bu ek güvenlik, Internet Explorer ve dolayısıyla WebBrowser ActiveX denetiminin Windows Vista ve Windows 7'de varsayılan olarak korumalı modda çalışmasıdır. Korumalı mod hakkında daha fazla bilgi için bkz. Internet Explorer'da Korumalı Modu Anlamak ve Çalışmak.
Not
Firefox'ta, İnternet bölgesindeyken WPF WebBrowser denetimi içeren bir XBAP çalıştırmaya çalışırsanız bir SecurityException fırlatılır. Bunun nedeni WPF güvenlik ilkesidir.
Kısmen Güvenilen İstemci Uygulamaları için APTCA Derlemelerini Devre Dışı Bırakma
Yönetilen derlemeler genel derleme önbelleğine (GAC) yüklendiğinde, kullanıcının bunları yüklemek için açık izin sağlaması gerektiğinden bunlar tam olarak güvenilir hale gelir. Bunlar tam olarak güvenilir olduğundan, bunları yalnızca tam olarak güvenilen yönetilen istemci uygulamaları kullanabilir. Kısmen güvenilen uygulamaların bunları kullanmasına izin vermek için, AllowPartiallyTrustedCallersAttribute (APTCA) ile işaretlenmeleri gerekir. Yalnızca kısmi güven içinde yürütülmek üzere güvenli olarak test edilmiş derlemeler bu öznitelikle işaretlenmelidir.
Ancak, GAC'ye yüklendikten sonra bir APTCA derlemesinin bir güvenlik açığı sergilemesi mümkündür. Bir güvenlik açığı bulunduğunda, derleme yayımcıları mevcut yüklemelerdeki sorunu düzeltmek ve sorun bulunduktan sonra oluşabilecek yüklemelere karşı koruma sağlamak için bir güvenlik güncelleştirmesi oluşturabilir. Güncelleştirmenin bir seçeneği derlemeyi kaldırmaktır, ancak bu, derlemeyi kullanan diğer tam güvenilir istemci uygulamalarını bozabilir.
WPF, APTCA derlemesini kaldırmadan kısmen güvenilen XBAP'ler için bir APTCA derlemesinin devre dışı bırakılabildiği bir mekanizma sağlar.
APTCA derlemesini devre dışı bırakmak için özel bir kayıt defteri anahtarı oluşturmanız gerekir:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\policy\APTCA\<AssemblyFullName>, FileVersion=<AssemblyFileVersion>
Aşağıda bir örnek gösterilmektedir:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\policy\APTCA\aptcagac, Version=1.0.0.0, Culture=neutral, PublicKeyToken=215e3ac809a0fea7, FileVersion=1.0.0.0
Bu anahtar, APTCA derlemesi için bir giriş oluşturur. Ayrıca bu anahtarda derlemeyi etkinleştiren veya devre dışı bırakan bir değer oluşturmanız gerekir. Değerin ayrıntıları aşağıdadır:
Değer Adı: APTCA_FLAG.
Değer Türü: REG_DWORD.
Değer Verileri: Devre dışı bırakmak için 1; etkinleştirmek için 0.
Bir derlemenin kısmen güvenilen istemci uygulamaları için devre dışı bırakılması gerekiyorsa, kayıt defteri anahtarını ve değerini oluşturan bir güncelleştirme yazabilirsiniz.
Not
Yönetilen uygulamaların çalışması için gerekli olduğundan çekirdek .NET Framework derlemeleri bu şekilde devre dışı bırakıldığından etkilenmez. APTCA derlemelerini devre dışı bırakma desteği öncelikli olarak üçüncü taraf uygulamaları hedeflemektedir.
Gevşek XAML Dosyaları için Korumalı Alan Davranışı
Gevşek XAML dosyaları, arka planda koda, olay işleyiciye veya uygulamaya özgü derlemelere bağımlı olmayan yalnızca işaretleme XAML dosyalarıdır. Gevşek XAML dosyalarına doğrudan tarayıcıdan gidildiğinde, bunlar varsayılan İnternet bölgesi izin kümesine göre bir güvenlik korumalı alanına yüklenir.
Ancak, bağımsız bir uygulamadan NavigationWindow veya Frame'e geçilerek gevşek XAML dosyalarına gidildiğinde güvenlik davranışı farklıdır.
Her iki durumda da, erişilen bağımsız XAML dosyası, konak uygulamanın izinlerini devralır. Ancak bu davranış güvenlik açısından istenmeyen bir durum olabilir, özellikle de güvenilir olmayan veya bilinmeyen bir varlık tarafından gevşek bir XAML dosyası oluşturulduysa. Bu içerik türü,
<Frame
Source="ExternalContentPage.xaml"
SandboxExternalContent="True">
</Frame>
<!-- Sandboxing external content using NavigationWindow-->
<NavigationWindow
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
Source="ExternalContentPage.xaml"
SandboxExternalContent="True">
</NavigationWindow>
Bu ayar ile dış içerik, uygulamayı barındıran işlemden ayrı bir işleme yüklenir. Bu işlem varsayılan İnternet bölgesi izin kümesiyle sınırlıdır ve bunu barındırma uygulamasından ve istemci bilgisayardan etkili bir şekilde yalıtılır.
Nôt
Tek başına bir uygulamada, NavigationWindow veya Frame'den gevşek XAML dosyalarına gezinme, PresentationHost işlemini içeren WPF tarayıcı barındırma altyapısı üzerine kurulmuş olsa da, güvenlik düzeyi, içeriğin doğrudan Windows Vista ve Windows 7 üzerinde Internet Explorer'da yüklenmesi durumuna nazaran biraz daha düşüktür (yine de PresentationHost aracılığıyla). Bunun nedeni, Web tarayıcısı kullanan tek başına bir WPF uygulamasının Internet Explorer'ın ek Korumalı Mod güvenlik özelliğini sağlamamasıdır.
Güvenliği Yükselten WPF Uygulamaları Geliştirme Kaynakları
Güvenliği yükselten WPF uygulamaları geliştirmeye yardımcı olacak bazı ek kaynaklar aşağıdadır:
Alan | Kaynak |
---|---|
Yönetilen kod | Desenler ve Uygulamalar için Güvenlik Kılavuzu |
CAS | Kod Erişimi Güvenlik |
ClickOnce | ClickOnce Güvenlik ve Dağıtım |
WPF | WPF Kısmi Güven Güvenliği |
Ayrıca bkz.
- WPF Kısmi Güven Güvenliği
- WPF Güvenlik Stratejisi - Platform Güvenliği
- WPF Güvenlik Stratejisi - Güvenlik Mühendisliği
- Desenler ve Uygulamalar için Güvenlik Rehberi
- Kod Erişim Güvenliği
- ClickOnce Güvenlik ve Dağıtım
- WPF'de XAML
.NET Desktop feedback