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ı, Ister Windows Installer (.msi), XCopy ister ClickOnce kullanılarak dağıtılsın, sınırsız izinlerle (CASFullTrust izin kümesi) yürütülür. ClickOnce ile kısmi güven, tek başına WPF uygulamalarının dağıtılması desteklenmez. Ancak, tam güven konak uygulaması .NET Framework Eklenti modelini kullanarak kısmi güven AppDomain oluşturabilir. Daha fazla bilgi için bkz . WPF Eklentilerine 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ı tarafından barındırılan uygulamalar, varsayılan olarak varsayılan CASİnternet bölgesi izin kümesiyle sınırlı olan kısmi güven güvenlik korumalı alanı içinde yürütü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üven 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:

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ı gezintisi , 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:

Uygulama gezintisi ile tarayıcı gezintisi arasındaki ilişki.

Bir XBAP'nin gidebilecekleri içerik türü öncelikli olarak uygulama gezintisi veya tarayıcı gezintisinin kullanılıp kullanılmadığına göre 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 Derleme türü Kaynak olan bir projeye eklenen dosyalar. pack://application:,,,/MyResourceFile.xaml
Content Derleme türü İçerik olan bir projeye eklenen dosyalar. pack://application:,,,/MyContentFile.xaml
Kaynak site Derleme türü Yok olan bir projeye eklenen dosyalar. pack://siteoforigin:,,,/MySiteOfOriginFile.xaml
Uygulama kodu Arka planda derlenmiş kod içeren XAML kaynakları.

-veya-

Sayfa derleme 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ı Gezintisi. Kullanıcı bir Hyperlink öğeye tıklayarak geziniyor.

  • Programlı Gezinti. Uygulama, örneğin özelliğini ayarlayarak kullanıcıyı dahil etmeden geziniyor NavigationWindow.Source .

Tarayıcı Gezinti Güvenliği

Tarayıcı gezintisi yalnızca aşağıdaki koşullar altında güvenli kabul edilir:

  • Kullanıcı Gezintisi. Kullanıcı, iç içe yerleştirilmiş bir Hyperlink öğesinde değil ana NavigationWindowöğesinde bulunan bir öğeye tıklayarak geziniyor Frame.

  • Bölge. Gidilmekte olan içerik İnternet'te veya yerel intranette bulunur.

  • Protokol. Kullanılan protokol http, https, dosya veya mailto şeklindedir.

XBAP bu koşullara uymayan bir şekilde içeriğe gitmeyi denerse, bir SecurityException oluşturulur.

Web'e Gözatma Yazılımı Güvenlik Ayarları

Bilgisayarınızdaki güvenlik ayarları, web'e gözatma yazılımlarına erişim izni verildiğini belirler. Web gözatma yazılımı, Internet Explorer ve PresentationHost.exe dahil 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

  • Komut dosyası

  • Kullanıcı Kimlik Doğrulaması

Bu şekilde güvenli hale getirilebilen işlevsellik koleksiyonu, İnternet, İntranet, Güvenilen Siteler ve Kısıtlanmış Siteler bölgeleri için her bölge temelinde 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:

  1. Denetim Masası'nı açın.

  2. Ağ ve İnternet'e ve ardından İnternet Seçenekleri'ne tıklayın.

    İnternet Seçenekleri iletişim kutusu görüntülenir.

  3. Güvenlik sekmesinde, güvenlik ayarlarını yapılandırmak için bölgeyi seçin.

  4. Ö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.

    Güvenlik Ayarları iletişim kutusunu gösteren ekran görüntüsü.

Not

Internet Explorer'dan Internet Seçenekleri iletişim kutusuna da ulaşabilirsiniz. Araçlar'a ve ardından İnternet Seçenekleri'ne tıklayın.

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 gidip gitmeyeceğini ve gevşek olup olmayacağını 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 İstem seçenekleri).

Varsayılan olarak, bu ayarların tümü İnternet, Yerel intranet ve Güvenilen siteler bölgeleri için etkinleştirilir ve Kısıtlı siteler bölgesi için devre dışı bırakılır.

İ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 vermek için; İzin vermek için 0.
LooseXamlDisallow REG_DWORD 1 izin vermek için; İzin vermek için 0.
WebBrowserDisallow REG_DWORD 1 izin vermek için; İzin vermek için 0.
MediaAudioDisallow REG_DWORD 1 izin vermek için; İzin vermek için 0.
MediaImageDisallow REG_DWORD 1 izin vermek için; İzin vermek için 0.
MediaVideoDisallow REG_DWORD 1 izin vermek için; İzin vermek için 0.
ScriptInteropDisallow REG_DWORD 1 izin vermek için; İzin vermek için 0.

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 denetimi kullanan WebBrowser uygulamalar tarafından doğrudan 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 Frame gitmek için öğesini WebBrowser kullandığından denetim 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 yöntemini ve ObjectForScripting özelliğini kullanarak InvokeScript barındırılan betikle etkileşimdeyse geçerlidir. Daha fazla bilgi için bkz . WPF Eklentilerine 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 denetiminin sarmaladığı WebBrowser ActiveX denetimini barındıran uygulamaları yapılandırmalarına olanak tanıyan Internet WebBrowser 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 ve İnternet Özellik Denetimlerine Giriş.

WPF denetimini kullanan tek başına bir WPF WebBrowser 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
FEATURE_OBJECT_CACHING
FEATURE_SAFE_BINDTOOBJECT
FEATURE_WINDOW_RESTRICTIONS
FEATURE_ZONE_ELEVATION
FEATURE_RESTRICT_FILEDOWNLOAD
FEATURE_RESTRICT_ACTIVEXINSTALL
FEATURE_ADDON_MANAGEMENT
FEATURE_HTTP_USERNAME_PASSWORD_DISABLE
FEATURE_SECURITYBAND
FEATURE_UNC_SAVEDFILECHECK
FEATURE_VALIDATE_NAVIGATE_URL
FEATURE_DISABLE_TELNET_PROTOCOL
FEATURE_WEBOC_POPUPMANAGEMENT
FEATURE_DISABLE_LEGACY_COMPRESSION
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 Konak Güvenliği SSS: Bölüm I of II ve MSHTML Konak 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
FEATURE_RESTRICT_RES_TO_LMZ
FEATURE_RESTRICT_ABOUT_PROTOCOL_IE7
FEATURE_SHOW_APP_PROTOCOL_WARN_DIALOG
FEATURE_LOCALMACHINE_LOCKDOWN
FEATURE_FORCE_ADDR_AND_STATUS
FEATURE_RESTRICTED_ZONE_WHEN_FILE_NOT_FOUND

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
FEATURE_ENABLE_SCRIPT_PASTE_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 . Korumalı Modda Internet Explorer'ı Anlama ve Çalışma.

Not

Firefox'ta WPF WebBrowser denetimi içeren bir XBAP çalıştırmaya çalışırsanız, İnternet bölgesindeyken bir SecurityException oluşturulur. 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 , (APTCA) ile AllowPartiallyTrustedCallersAttribute işaretlenmelidir. 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 ' ı seçin.

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, tek başına bir uygulamada gevşek XAML dosyalarına veya uygulamasından NavigationWindow Frame gidildiğinde güvenlik davranışı farklıdır.

Her iki durumda da, adresine gidilen gevşek XAML dosyası, konak uygulamasını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ü dış içerik olarak bilinir ve her ikisi de Frame olarak bilinir ve NavigationWindow adresine gidildiğinde içeriği yalıtacak şekilde yapılandırılabilir. Yalıtım, ve NavigationWindowiçin Frame aşağıdaki örneklerde gösterildiği gibi SandboxExternalContent özelliği true olarak ayarlanarak elde edilir:

<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.

Not

Tek başına bir uygulamadaki veya Frame bir NavigationWindow uygulamadaki gevşek XAML dosyalarına gezinti, PresentationHost işlemini içeren WPF tarayıcı barındırma altyapısını temel alarak uygulansa da, güvenlik düzeyi içeriğin Doğrudan Windows Vista ve Windows 7 üzerinde Internet Explorer'a yüklenmesinden biraz daha azdır (yine de PresentationHost aracılığıyla olabilir). 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 Uygulamalar için Desenler ve Uygulamalar Güvenlik Kılavuzu
CAS Kod Erişim Güvenliği
ClickOnce ClickOnce Güvenliği ve Dağıtımı
WPF WPF Kısmi Güven Güvenliği

Ayrıca bkz.