共用方式為


安全性 (WPF)

開發 Windows Presentation Foundation (WPF) 獨立和瀏覽器裝載的應用程式時,您必須考量安全性模型。 WPF 獨立應用程式會使用不受限制的權限執行 (CASFullTrust 權限集),不論使用 Windows Installer (.msi)、XCopy 還是 ClickOnce 所部署都一樣。 不支援使用 ClickOnce 部署部分信任的獨立 WPF 應用程式。 不過,完全信任主應用程式可以使用 .NET Framework 增益集模型來建立部分信任 AppDomain。 如需詳細資訊,請參閱 WPF 增益集概觀

WPF 瀏覽器裝載的應用程式是由 Windows Internet Explorer 或 Firefox 所裝載,而且可以是 XAML 瀏覽器應用程式 (XBAP) 或鬆散的 Extensible Application Markup Language (XAML) 文件。如需詳細資訊,請參閱 WPF XAML 瀏覽器應用程式概觀

警告

XBAP 需要舊版瀏覽器才能運作,例如 Internet Explorer 和舊版的 Firefox。 Windows 10 和 Windows 11 通常不支援這些舊版瀏覽器。 由於安全性風險,現代化瀏覽器不再支援 XBAP 應用程式所需的技術。 不再支援啟用 XBAP 的外掛程式。 如需詳細資訊,請參閱 WPF 瀏覽器裝載應用程式 (XBAP) 常見問題集 (部分機器翻譯)。

WPF 瀏覽器裝載的應用程式預設是在部分信任安全性沙箱內執行,這限制為預設 CAS 網際網路區域權限集。 這會有效地隔離 WPF 瀏覽器裝載的應用程式與用戶端電腦,而方法與預期隔離一般 Web 應用程式相同。 XBAP 可以根據部署 URL 的安全性區域以及用戶端的安全性組態來提高權限,而最高為「完全信任」。 如需詳細資訊,請參閱 WPF 部分信任安全性

此主題討論 Windows Presentation Foundation (WPF) 獨立和瀏覽器裝載應用程式的安全性模型。

本主題包含下列幾節:

安全巡覽

針對 XBAP,WPF 會區分兩種類型的瀏覽:應用程式和瀏覽器。

「應用程式巡覽」是瀏覽器所裝載之應用程式的內容項目間的巡覽。 「瀏覽器巡覽」是變更瀏覽器本身的內容和位置 URL 的巡覽。 下圖顯示應用程式巡覽 (通常是 XAML) 與瀏覽器巡覽 (通常是 HTML) 之間的關係︰

應用程式瀏覽與瀏覽器瀏覽之間的關聯性。

XBAP 視為安全可進行瀏覽的內容類型主要是透過使用應用程式瀏覽還是瀏覽器瀏覽所決定。

應用程式巡覽安全性

如果可以使用支援四種內容的組件 URI 來識別應用程式瀏覽,則會將它視為安全:

內容類型 描述 URI 範例
資源 新增至組建類型為資源的專案的檔案。 pack://application:,,,/MyResourceFile.xaml
Content 新增至組建類型為內容的專案的檔案。 pack://application:,,,/MyContentFile.xaml
Site of origin 新增至組建類型為的專案的檔案。 pack://siteoforigin:,,,/MySiteOfOriginFile.xaml
應用程式程式碼 具有已編譯程式碼後置的 XAML 資源。

-或-

新增至組建類型為頁面的專案的 XAML 檔案。
pack://application:,,,/MyResourceFile .xaml

注意

如需應用程式資料檔案和組件 URI 的詳細資訊,請參閱 WPF 應用程式資源、內容和資料檔案

使用者或透過程式設計方式可以巡覽到這些內容類型的檔案︰

  • 使用者巡覽。 使用者藉由按兩下 Hyperlink 元素進行瀏覽。

  • 程式設計巡覽。 例如,藉由設定 NavigationWindow.Source 屬性,應用程式會瀏覽而不涉及使用者。

瀏覽器巡覽安全性

只有在下列情況下,才會將瀏覽器巡覽視為安全:

  • 使用者巡覽。 使用者會透過按下主要 NavigationWindow 內而不是巢狀 Frame 內的 Hyperlink 元素進行瀏覽。

  • 區域。 所要巡覽的內容位在網際網路或近端內部網路。

  • 通訊協定。 所使用的通訊協定是 httphttpsfilemailto

如果 XBAP 嘗試使用不符合這些條件的方式來瀏覽至內容,則會擲回 SecurityException

Web 瀏覽軟體安全性設定

電腦上的安全性設定決定授與任何 Web 瀏覽軟體的存取權。 Web 瀏覽軟體包括任何使用 WinINetUrlMon API 的應用程式或元件,例如 Internet Explorer 和 PresentationHost.exe。

您可以使用 Internet Explorer 所提供的機制來設定允許 Internet Explorer 執行或從中執行的功能,包括下列:

  • .NET Framework 相關元件

  • ActiveX 控制項和外掛程式

  • 下載

  • 指令碼

  • 使用者驗證

使用這種方式保護的功能集合是根據網際網路內部網路信任的網站限制的網站區域所設定。 下列步驟描述如何設定安全性設定:

  1. 開啟 [控制台]

  2. 按一下 [網路和網際網路],然後按一下 [網際網路選項]

    此時會出現 [網際網路選項] 對話方塊。

  3. 在 [安全性] 索引標籤上,選取要設定安全性設定的區域。

  4. 按一下 [自訂層級] 按鈕。

    [安全性設定] 對話方塊隨即出現,而且您可以設定所選取區域的安全性設定。

    顯示 [安全性設定] 對話方塊的螢幕擷取畫面。

注意

您也可以從 Internet Explorer 到達 [網際網路選項] 對話方塊。 按一下[工具],然後按一下[網際網路選項]

從 Windows Internet Explorer 7 開始,包含下列特別適用於 .NET Framework 的安全性設定:

  • 鬆散 XAML。 控制 Internet Explorer 是否可以瀏覽至和鬆散的 XAML 檔案。 ([啟用]、[停用] 和 [提示] 選項)。

  • XAML 瀏覽器應用程式。 控制 Internet Explorer 是否可以瀏覽至和執行 XBAP。 ([啟用]、[停用] 和 [提示] 選項)。

預設會針對網際網路近端內部網路信任的網站區域啟用這些設定,而針對限制的網站區域則予以停用。

除了透過 [網際網路選項] 取得的安全性設定之外,還提供下列登錄值可選擇性地封鎖許多有安全性顧慮的 WPF 功能。 值會定義在下列機碼下方︰

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

下表列出可設定的值。

值名稱 值類型 數值資料
XBAPDisallow REG_DWORD 1 表示不允許;0 表示允許。
LooseXamlDisallow REG_DWORD 1 表示不允許;0 表示允許。
WebBrowserDisallow REG_DWORD 1 表示不允許;0 表示允許。
MediaAudioDisallow REG_DWORD 1 表示不允許;0 表示允許。
MediaImageDisallow REG_DWORD 1 表示不允許;0 表示允許。
MediaVideoDisallow REG_DWORD 1 表示不允許;0 表示允許。
ScriptInteropDisallow REG_DWORD 1 表示不允許;0 表示允許。

WebBrowser 控制項和功能控制項

WPF WebBrowser 控制項可用來裝載 Web 內容。 WPF WebBrowser 控制項會包裝基礎 WebBrowser ActiveX 控制項。 當您使用 WPF WebBrowser 控制項來裝載不受信任的 Web 內容時,WPF 會有一部分支援保護您的應用程式。 不過,使用 WebBrowser 控制項的應用程式必須直接套用一些安全性功能。 如需 WebBrowser ActiveX 控制項的詳細資訊,請參閱 WebBrowser Control Overviews and Tutorials (WebBrowser 控制項概觀和教學課程)。

注意

本節也適用於 Frame 控制項,因為它會使用 WebBrowser 瀏覽至 HTML 內容。

如果使用 WPF WebBrowser 控制項來裝載不受信任的 Web 內容,則您的應用程式應該使用部分信任 AppDomain 來協助隔離應用程式碼與可能是惡意的 HTML 指令碼。 如果您的應用程式使用 InvokeScript 方法和 ObjectForScripting 屬性來與裝載的指令碼互動,則尤其如此。 如需詳細資訊,請參閱 WPF 增益集概觀

如果您的應用程式使用 WPF WebBrowser 控制項,則提高安全性並降低攻擊的另一種方法是啟用 Internet Explorer 功能控制項。 功能控制項是 Internet Explorer 的新增功能,可讓系統管理員和開發人員設定 Internet Explorer 功能以及裝載 WPF WebBrowser 控制項所包裝之 WebBrowser ActiveX 控制項的應用程式。 使用 CoInternetSetFeatureEnabled 函式,或變更登錄中的值,即可設定功能控制項。 如需功能控制項的詳細資訊,請參閱 Introduction to Feature Controls (功能控制項簡介) 和 Internet Feature Controls (網際網路功能控制項)。

如果您正在開發使用 WPF WebBrowser 控制項的獨立 WPF 應用程式,WPF 會自動啟用應用程式的下列功能控制項。

功能控制項
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

因為會無條件地啟用這些功能控制項,所以它們可能會損害完全信任應用程式。 在此情況下,如果特定應用程式和其所裝載的內容沒有安全性風險,則可以停用對應的功能控制項。

具現化 WebBrowser ActiveX 物件的處理序會套用功能控制項。 因此,如果您要建立的獨立應用程式會巡覽到不受信任的內容,則應該認真考慮啟用其他功能控制項。

注意

這項建議根據 MSHTML 和 SHDOCVW 主機安全性的一般建議。 如需詳細資訊,請參閱 The MSHTML Host Security FAQ: Part I of II (MSHTML 主機安全性常見問題集︰第一部分 (共兩部分)) 和 The MSHTML Host Security FAQ: Part II of II (MSHTML 主機安全性常見問題集︰第二部分 (共兩部分))。

針對可執行檔,請考慮將登錄值設定為 1 來啟用下列功能控制項。

功能控制項
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

針對可執行檔,請考慮將登錄值設定為 0 來停用下列功能控制項。

功能控制項
FEATURE_ENABLE_SCRIPT_PASTE_URLACTION_IF_PROMPT

如果您在 Windows Internet Explorer 中執行包含 WPF WebBrowser 控制項的部分信任 XAML 瀏覽器應用程式 (XBAP),則 WPF 會在 Internet Explorer 處理序的位址空間中裝載 WebBrowser ActiveX 控制項。 因為 WebBrowser ActiveX 控制項裝載於 Internet Explorer 處理序中,所以也會針對 WebBrowser ActiveX 控制項啟用 Internet Explorer 的所有功能控制項。

與一般獨立應用程式相較之下,在 Internet Explorer 中執行的 XBAP 也會取得額外層級的安全性。 這項額外安全性是針對 Internet Explorer,因此,在 Windows Vista 和 Windows 7 上,WebBrowser ActiveX 控制項預設會以受保護模式執行。 如需受保護模式的詳細資訊,請參閱 Understanding and Working in Protected Mode Internet Explorer (Internet Explorer 受保護模式的瞭解和使用)。

注意

如果您嘗試在 Firefox 中執行包含 WPF WebBrowser 控制項的 XBAP,而在網際網路區域中,則會擲回 SecurityException。 這是因為 WPF 安全性原則。

停用部分信任用戶端應用程式的 APTCA 組件

將 Managed 組件安裝至全域組件快取 (GAC) 時,它們會變成完全受信任,因為使用者必須提供明確權限才能進行安裝。 因為它們完全受信任,所以只有完全受信任的受管理用戶端應用程式才能使用它們。 若要允許部分信任的應用程式使用這些它們,則必須將其標示為 AllowPartiallyTrustedCallersAttribute (APTCA)。 只有經過測試可在部分信任中安全執行的組件才應該標記這個屬性。

不過,APTCA 組件可能會在安裝至 GAC 之後出現安全性缺陷。 發現安全性缺陷之後,組件發行者可以產生安全性更新來修正現有安裝上的問題,以及防止在發現問題之後可能進行的安裝。 雖然解除安裝組件可能會中斷其他使用組件的完全信任用戶端應用程式,但是更新的其中一個選項是解除安裝組件。

APTCA 組件可以針對部分信任 XBAP 停用 WPF 所提供的機制,而不需要解除安裝 APTCA 組件。

若要停用 APTCA 組件,您必須建立特殊登錄機碼︰

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

下列示範範例:

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

此機碼會為 APTCA 組件建立一個項目。 您也必須在這個機碼中建立啟用或停用組件的數值。 數值的詳細資料如下︰

  • 數值名稱:APTCA_FLAG

  • 數值類型:REG_DWORD

  • 數值資料:1 表示停用;0 表示啟用。

如果必須停用部分信任用戶端應用程式的組件,您可以撰寫可建立登錄機碼和值的更新。

注意

核心 .NET Framework 組件不會受到透過這種方式停用它們的影響,因為受管理應用程式需要有它們才能執行。 停用 APTCA 組件的支援主要是針對協力廠商應用程式。

鬆散 XAML 檔案的沙箱行為

鬆散的 XAML 檔案是不依賴任何程式碼後置、事件處理常式或應用程式特定組件的純標記 XAML 檔案。 直接從瀏覽器瀏覽至鬆散的 XAML 檔案時,則根據預設網際網路區域權限集,它們會位於安全性沙箱中。

不過,在獨立應用程式中,從 NavigationWindowFrame 瀏覽至鬆散的 XAML 檔案時,安全性行為會有所不同。

在這兩種情況下,所瀏覽至的鬆散的 XAML 檔案會繼承其主應用程式的權限。 不過,從安全性角度來看,這可能是不想要有的行為,尤其是鬆散的 XAML 檔案是由不受信任或未知的實體所產生時。 這種類型的內容稱為外部內容,而且 FrameNavigationWindow 都可以設定為在瀏覽至時加以隔離。 藉由將 SandboxExternalContent 屬性設定為 True 來達成隔離,如下列範例所示,FrameNavigationWindow

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

使用此設定,會將外部內容載入與裝載應用程式的程序不同的程序。 此程序僅限於預設網際網路區域權限集,可有效地隔離它與裝載應用程式和用戶端電腦。

注意

即使根據 WPF 瀏覽器裝載基礎結構 (包含 PresentationHost 處理序) 實作從獨立應用程式的 NavigationWindowFrame 到鬆散的 XAML 檔案的瀏覽,安全性層級還是會略低於在 Windows Vista 和 Windows 7 (仍是透過 PresentationHost) 中將內容直接載入到 Internet Explorer 時。 這是因為使用 Web 瀏覽器的獨立 WPF 應用程式不會提供 Internet Explorer 的額外受保護模式安全性功能。

用於開發可提高安全性的 WPF 應用程式的資源

下列是一些額外資源,協助開發可提高安全性的 WPF 應用程式:

區域 資源
受控碼 Patterns and Practices Security Guidance for Applications (應用程式的模式和實務安全性指南)
CAS 程式碼存取安全性
ClickOnce ClickOnce 安全性和部署
WPF WPF 部分信任安全性

另請參閱