Bagikan melalui


Keamanan (WPF)

Saat mengembangkan aplikasi mandiri Windows Presentation Foundation (WPF) dan yang dihosting browser, Anda harus mempertimbangkan model keamanan. Aplikasi mandiri WPF dijalankan dengan izin tidak terbatas (set izin CASFullTrust ), baik disebarkan menggunakan Windows Installer (.msi), XCopy, atau ClickOnce. Menyebarkan aplikasi WPF mandiri dan kepercayaan parsial dengan ClickOnce tidak didukung. Namun, aplikasi host kepercayaan penuh dapat membuat kepercayaan AppDomain parsial menggunakan model Add-in .NET Framework. Untuk informasi selengkapnya, lihat Gambaran Umum Add-In WPF.

Aplikasi yang dihosting browser WPF dihosting oleh Windows Internet Explorer atau Firefox, dan dapat berupa aplikasi browser XAML (XBAP) atau dokumen Extensible Application Markup Language (XAML) yang longgar Untuk informasi selengkapnya, lihat Gambaran Umum Aplikasi Browser WPF XAML.

Peringatan

XBAP memerlukan browser warisan untuk beroperasi, seperti Internet Explorer dan Firefox. Versi browser lama ini biasanya tidak didukung pada Windows 10 dan Windows 11. Browser modern tidak lagi mendukung teknologi yang diperlukan untuk aplikasi XBAP karena risiko keamanan. Plugin yang mengaktifkan XBAP tidak lagi didukung.

Aplikasi yang dihosting browser WPF dijalankan dalam kotak pasir keamanan kepercayaan parsial, secara default, yang terbatas pada kumpulan izin zona Internet CASdefault. Ini secara efektif mengisolasi aplikasi yang dihosting browser WPF dari komputer klien dengan cara yang sama seperti Yang Anda harapkan aplikasi Web biasa terisolasi. XBAP dapat meningkatkan hak istimewa, hingga Kepercayaan Penuh, tergantung pada zona keamanan URL penyebaran dan konfigurasi keamanan klien. Untuk informasi selengkapnya, lihat Keamanan Kepercayaan Parsial WPF.

Topik ini membahas model keamanan untuk aplikasi mandiri Windows Presentation Foundation (WPF) dan yang dihosting browser.

Topik ini berisi bagian berikut:

Navigasi Brankas

Untuk XBAP, WPF membedakan dua jenis navigasi: aplikasi dan browser.

Navigasi aplikasi adalah navigasi antara item konten dalam aplikasi yang dihosting oleh browser. Navigasi browser adalah navigasi yang mengubah konten dan URL lokasi browser itu sendiri. Hubungan antara navigasi aplikasi (biasanya XAML) dan navigasi browser (biasanya HTML) diperlihatkan dalam ilustrasi berikut:

Relationship between application navigation and browser navigation.

Jenis konten yang dianggap aman bagi XBAP untuk dinavigasi terutama ditentukan oleh apakah navigasi aplikasi atau navigasi browser digunakan.

Keamanan Navigasi Aplikasi

Navigasi aplikasi dianggap aman jika dapat diidentifikasi dengan URI paket, yang mendukung empat jenis konten:

Jenis Konten Deskripsi Contoh URI
Sumber daya File yang ditambahkan ke proyek dengan jenis build Sumber Daya. pack://application:,,,/MyResourceFile.xaml
Konten File yang ditambahkan ke proyek dengan jenis build Konten. pack://application:,,,/MyContentFile.xaml
Situs asal File yang ditambahkan ke proyek dengan jenis build Tidak Ada. pack://siteoforigin:,,,/MySiteOfOriginFile.xaml
Kode aplikasi Sumber daya XAML yang memiliki kode yang dikompilasi di belakang.

-atau-

File XAML yang ditambahkan ke proyek dengan jenis build Halaman.
pack://application:,,,/MyResourceFile .xaml

Catatan

Untuk informasi selengkapnya tentang file data aplikasi dan URI paket, lihat Sumber Daya Aplikasi, Konten, dan File Data WPF.

File tipe isi ini dapat dinavigasi oleh pengguna atau secara terprogram:

  • Navigasi Pengguna. Pengguna menavigasi dengan mengklik Hyperlink elemen.

  • Navigasi Terprogram. Aplikasi menavigasi tanpa melibatkan pengguna, misalnya, dengan mengatur NavigationWindow.Source properti .

Keamanan Navigasi Browser

Navigasi browser dianggap aman hanya dalam kondisi berikut:

  • Navigasi Pengguna. Pengguna menavigasi dengan mengklik Hyperlink elemen yang berada di dalam utama NavigationWindow, bukan dalam berlapis Frame.

  • Zona. Konten yang sedang dinavigasi berada di Internet atau intranet lokal.

  • Protokol. Protokol yang digunakan adalah http, https, file, atau mailto.

Jika XBAP mencoba menavigasi ke konten dengan cara yang tidak mematuhi kondisi ini, akan SecurityException dilemparkan.

Pengaturan Keamanan Perangkat Lunak Penjelajahan Web

Setelan keamanan pada komputer Anda menentukan akses yang diberikan peranti lunak penjelajah web. Perangkat lunak penjelajahan web mencakup aplikasi atau komponen apa pun yang menggunakan API WinINet atau UrlMon , termasuk Internet Explorer dan PresentationHost.exe.

Internet Explorer menyediakan mekanisme di mana Anda dapat mengonfigurasi fungsionalitas yang diizinkan untuk dijalankan oleh atau dari Internet Explorer, termasuk yang berikut ini:

  • Komponen yang bergantung pada .NET Framework

  • Kontrol dan plug-in ActiveX

  • Unduhan

  • Pembuatan skrip

  • Otentikasi Pengguna

Kumpulan fungsionalitas yang dapat diamankan dengan cara ini dikonfigurasi per zona untuk zona Internet, Intranet, Situs Tepercaya, dan Situs Terbatas. Langkah-langkah berikut menjelaskan cara mengonfigurasi pengaturan keamanan Anda:

  1. Buka Panel Kontrol.

  2. Klik Jaringan dan Internet lalu klik Opsi Internet.

    Kotak dialog Opsi Internet muncul.

  3. Pada tab Keamanan , pilih zona untuk mengonfigurasi pengaturan keamanan.

  4. Klik tombol Tingkat Kustom.

    Kotak dialog Pengaturan Keamanan muncul dan Anda dapat mengonfigurasi pengaturan keamanan untuk zona yang dipilih.

    Screenshot that shows the Security Settings dialog box.

Catatan

Anda juga bisa masuk ke kotak dialog Opsi Internet dari Internet Explorer. Klik Alat lalu klik Opsi Internet.

Dimulai dengan Windows Internet Explorer 7, pengaturan keamanan berikut khusus untuk .NET Framework disertakan:

  • XAML longgar. Mengontrol apakah Internet Explorer dapat menavigasi ke dan melepaskan file XAML. (Opsi Aktifkan, Nonaktifkan, dan Perintah).

  • Aplikasi browser XAML. Mengontrol apakah Internet Explorer dapat menavigasi ke dan menjalankan XBAP. (Opsi Aktifkan, Nonaktifkan, dan Perintah).

Secara default, semua setelan ini diaktifkan untuk zona Internet, Intranet lokal, dan Situs tepercaya, dan dinonaktifkan untuk zona situs terbatas.

Selain pengaturan keamanan yang tersedia melalui Opsi Internet, nilai registri berikut ini tersedia untuk memblokir sejumlah fitur WPF yang sensitif terhadap keamanan secara selektif. Nilai ditentukan di bawah kunci berikut:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\Windows Presentation Foundation\Features

Tabel berikut mencantumkan nilai yang bisa diatur.

Nama Nilai Jenis Nilai Data Nilai
XBAPDisallow REG_DWORD 1 untuk melarang; 0 untuk memungkinkan.
LooseXamlDisallow REG_DWORD 1 untuk melarang; 0 untuk memungkinkan.
WebBrowserDisallow REG_DWORD 1 untuk melarang; 0 untuk memungkinkan.
MediaAudioDisallow REG_DWORD 1 untuk melarang; 0 untuk memungkinkan.
MediaImageDisallow REG_DWORD 1 untuk melarang; 0 untuk memungkinkan.
MediaVideoDisallow REG_DWORD 1 untuk melarang; 0 untuk memungkinkan.
ScriptInteropDisallow REG_DWORD 1 untuk melarang; 0 untuk memungkinkan.

Kontrol WebBrowser dan Kontrol Fitur

Kontrol WPF WebBrowser dapat digunakan untuk menghosting konten Web. Kontrol WPF WebBrowser membungkus kontrol WebBrowser ActiveX yang mendasar. WPF menyediakan beberapa dukungan untuk mengamankan aplikasi Anda saat Anda menggunakan kontrol WPF WebBrowser untuk menghosting konten Web yang tidak tepercaya. Namun, beberapa fitur keamanan harus diterapkan langsung oleh aplikasi menggunakan WebBrowser kontrol. Untuk informasi selengkapnya tentang kontrol WebBrowser ActiveX, lihat Gambaran Umum dan Tutorial Kontrol WebBrowser.

Catatan

Bagian ini juga berlaku untuk Frame kontrol karena menggunakan WebBrowser untuk menavigasi ke konten HTML.

Jika kontrol WPF WebBrowser digunakan untuk menghosting konten Web yang tidak tepercaya, aplikasi Anda harus menggunakan kepercayaan AppDomain parsial untuk membantu mengisolasi kode aplikasi Anda dari kode skrip HTML yang berpotensi berbahaya. Ini terutama berlaku jika aplikasi Anda berinteraksi dengan skrip yang dihosting dengan menggunakan InvokeScript metode dan ObjectForScripting properti . Untuk informasi selengkapnya, lihat Gambaran Umum Add-In WPF.

Jika aplikasi Anda menggunakan kontrol WPF WebBrowser , cara lain untuk meningkatkan keamanan dan mengurangi serangan adalah dengan mengaktifkan kontrol fitur Internet Explorer. Kontrol fitur adalah penambahan pada Internet Explorer yang memungkinkan administrator dan pengembang mengonfigurasi fitur Internet Explorer dan aplikasi yang menghosting kontrol WebBrowser ActiveX, yang dibungkus kontrol WPF WebBrowser . Kontrol fitur dapat dikonfigurasi dengan menggunakan fungsi CoInternetSetFeatureEnabled atau dengan mengubah nilai dalam registri. Untuk informasi selengkapnya tentang kontrol fitur, lihat Pengenalan Kontrol Fitur dan Kontrol Fitur Internet.

Jika Anda mengembangkan aplikasi WPF mandiri yang menggunakan kontrol WPF WebBrowser , WPF secara otomatis mengaktifkan kontrol fitur berikut untuk aplikasi Anda.

Kontrol Fitur
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

Karena kontrol fitur ini diaktifkan tanpa syarat, aplikasi kepercayaan penuh mungkin terganggu oleh mereka. Dalam hal ini, jika tidak ada risiko keamanan untuk aplikasi tertentu dan konten yang dihostingnya, kontrol fitur yang sesuai dapat dinonaktifkan.

Kontrol fitur diterapkan oleh proses yang membuat instans objek WebBrowser ActiveX. Oleh karena itu, jika Anda membuat aplikasi mandiri yang dapat menavigasi ke konten yang tidak tepercaya, Anda harus mempertimbangkan untuk mengaktifkan kontrol fitur tambahan dengan serius.

Catatan

Rekomendasi ini didasarkan pada rekomendasi umum untuk keamanan host MSHTML dan SHDOCVW. Untuk informasi selengkapnya, lihat FAQ Keamanan Host MSHTML: Bagian I dari II dan FAQ Keamanan Host MSHTML: Bagian II.

Untuk executable Anda, pertimbangkan untuk mengaktifkan kontrol fitur berikut dengan mengatur nilai registri ke 1.

Kontrol Fitur
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

Untuk executable Anda, pertimbangkan untuk menonaktifkan kontrol fitur berikut dengan mengatur nilai registri ke 0.

Kontrol Fitur
FEATURE_ENABLE_SCRIPT_PASTE_URLACTION_IF_PROMPT

Jika Anda menjalankan aplikasi browser XAML kepercayaan parsial (XBAP) yang menyertakan kontrol WPF WebBrowser di Windows Internet Explorer, WPF menghosting kontrol WebBrowser ActiveX di ruang alamat proses Internet Explorer. Karena kontrol WebBrowser ActiveX dihosting dalam proses Internet Explorer, semua kontrol fitur untuk Internet Explorer juga diaktifkan untuk kontrol WebBrowser ActiveX.

XBAP yang berjalan di Internet Explorer juga mendapatkan tingkat keamanan tambahan dibandingkan dengan aplikasi mandiri normal. Keamanan tambahan ini karena Internet Explorer, dan oleh karena itu kontrol WebBrowser ActiveX, berjalan dalam mode terlindungi secara default pada Windows Vista dan Windows 7. Untuk informasi selengkapnya tentang mode terproteksi, lihat Memahami dan Bekerja dalam Mode Terproteksi Internet Explorer.

Catatan

Jika Anda mencoba menjalankan XBAP yang menyertakan kontrol WPF WebBrowser di Firefox, saat berada di zona Internet, SecurityException akan dilemparkan. Hal ini disebabkan oleh kebijakan keamanan WPF.

Menonaktifkan Rakitan APTCA untuk Sebagian Aplikasi Klien Tepercaya

Ketika rakitan terkelola diinstal ke dalam cache perakitan global (GAC), mereka menjadi sepenuhnya tepercaya karena pengguna harus memberikan izin eksplisit untuk menginstalnya. Karena mereka sepenuhnya tepercaya, hanya aplikasi klien terkelola yang sepenuhnya tepercaya yang dapat menggunakannya. Untuk memungkinkan aplikasi tepercaya sebagian menggunakannya, aplikasi harus ditandai dengan AllowPartiallyTrustedCallersAttribute (APTCA). Hanya rakitan yang telah diuji agar aman untuk eksekusi dalam kepercayaan parsial yang harus ditandai dengan atribut ini.

Namun, dimungkinkan bagi rakitan APTCA untuk menunjukkan kelemahan keamanan setelah dipasang ke GAC . Setelah kelemahan keamanan ditemukan, penerbit rakitan dapat menghasilkan pembaruan keamanan untuk memperbaiki masalah pada penginstalan yang ada, dan untuk melindungi dari penginstalan yang mungkin terjadi setelah masalah ditemukan. Salah satu opsi untuk pembaruan adalah menghapus instalan rakitan, meskipun itu dapat merusak aplikasi klien tepercaya lainnya yang menggunakan assembly.

WPF menyediakan mekanisme di mana rakitan APTCA dapat dinonaktifkan untuk XBAP tepercaya sebagian tanpa menghapus instalan rakitan APTCA.

Untuk menonaktifkan rakitan APTCA, Anda harus membuat kunci registri khusus:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\policy\APTCA\<AssemblyFullName>, FileVersion=<AssemblyFileVersion>

Berikut ini memperlihatkan contoh:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\policy\APTCA\aptcagac, Version=1.0.0.0, Culture=neutral, PublicKeyToken=215e3ac809a0fea7, FileVersion=1.0.0.0

Kunci ini menetapkan entri untuk rakitan APTCA. Anda juga harus membuat nilai dalam kunci ini yang mengaktifkan atau menonaktifkan rakitan. Berikut ini adalah detail nilai:

  • Nama Nilai: APTCA_FLAG.

  • Jenis Nilai: REG_DWORD.

  • Data Nilai: 1 untuk dinonaktifkan; 0 untuk mengaktifkan.

Jika rakitan harus dinonaktifkan untuk aplikasi klien yang tepercaya sebagian, Anda dapat menulis pembaruan yang membuat kunci dan nilai registri.

Catatan

Rakitan Core .NET Framework tidak terpengaruh dengan menonaktifkannya dengan cara ini karena diperlukan untuk menjalankan aplikasi terkelola. Dukungan untuk menonaktifkan rakitan APTCA terutama ditargetkan ke aplikasi pihak ketiga.

Perilaku Kotak Pasir untuk File XAML Longgar

File XAML longgar adalah file XAML khusus markup yang tidak bergantung pada kode di belakang, penanganan aktivitas, atau rakitan khusus aplikasi. Ketika file XAML yang longgar dinavigasi ke langsung dari browser, file tersebut dimuat dalam kotak pasir keamanan berdasarkan kumpulan izin zona Internet default.

Namun, perilaku keamanan berbeda ketika file XAML longgar dinavigasi dari NavigationWindow atau Frame dalam aplikasi mandiri.

Dalam kedua kasus, file XAML longgar yang dinavigasi untuk mewarisi izin aplikasi hostnya. Namun, perilaku ini mungkin tidak diinginkan dari perspektif keamanan, terutama jika file XAML longgar diproduksi oleh entitas yang tidak tepercaya atau tidak diketahui. Jenis konten ini dikenal sebagai konten eksternal, dan keduanya Frame dan NavigationWindow dapat dikonfigurasi untuk mengisolasinya saat dinavigasi. Isolasi dicapai dengan mengatur properti SandboxExternalContent ke true, seperti yang ditunjukkan dalam contoh berikut untuk Frame dan NavigationWindow:

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

Dengan pengaturan ini, konten eksternal akan dimuat ke dalam proses yang terpisah dari proses yang menghosting aplikasi. Proses ini dibatasi untuk set izin zona Internet default, secara efektif mengisolasinya dari aplikasi hosting dan komputer klien.

Catatan

Meskipun navigasi ke file XAML longgar dari NavigationWindow atau Frame dalam aplikasi mandiri diimplementasikan berdasarkan infrastruktur hosting browser WPF, yang melibatkan proses PresentationHost, tingkat keamanan sedikit lebih sedikit daripada ketika konten dimuat langsung di Internet Explorer pada Windows Vista dan Windows 7 (yang masih akan melalui PresentationHost). Ini karena aplikasi WPF mandiri yang menggunakan browser Web tidak menyediakan fitur keamanan Mode Terproteksi tambahan dari Internet Explorer.

Sumber Daya untuk Mengembangkan Aplikasi WPF yang Mempromosikan Keamanan

Berikut ini adalah beberapa sumber daya tambahan untuk membantu mengembangkan aplikasi WPF yang mempromosikan keamanan:

Luas Sumber daya
Kode terkelola Panduan Keamanan Pola dan Praktik untuk Aplikasi
CAS Keamanan Akses Kode
ClickOnce Keamanan dan Penyebaran ClickOnce
WPF Keamanan Kepercayaan Parsial WPF

Lihat juga