Share via


安全性 (WPF)

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

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

WPF 瀏覽器裝載的應用程式會在部分信任安全性沙箱內執行,根據預設,會限制為預設 CAS Internet 區域權限集合。 這樣會將 WPF 瀏覽器裝載的應用程式有效地與用戶端電腦隔離,方法就像隔離平常的 Web 應用程式一樣。 XBAP 可以提高使用權限,最高可提高至完全信任,視部署 URL 的安全性區域以及用戶端的安全性組態而定。 如需詳細資訊,請參閱 WPF 部分信任安全性

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

此主題包括下列章節:

  • 安全巡覽

  • Web 瀏覽軟體安全性設定

  • WebBrowser 控制項和功能控制項

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

  • 鬆散 XAML 檔案的沙箱行為

  • 開發具更佳安全性之 WPF 應用程式的相關資源

安全巡覽

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

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

巡覽圖表

XBAP 可以安全巡覽的內容類型,主要取決於使用的是應用程式巡覽還是瀏覽器巡覽。

應用程式巡覽安全性

應用程式巡覽如果可以用封包 URI 來識別,即視為安全的,可以支援四種類型的內容:

內容類型

說明

URI 範例

資源

以組建類型 [資源] 加入至專案的檔案。

pack://application:,,,/MyResourceFile.xaml

內容

以組建類型 [內容] 加入至專案的檔案。

pack://application:,,,/MyContentFile.xaml

來源網站

以組建類型 [] 加入至專案的檔案。

pack://siteoforigin:,,,/MySiteOfOriginFile.xaml

應用程式程式碼

具有已編譯之後置程式碼的 XAML 資源。

-或-

以組建類型 [頁面] 加入至專案的 XAML 檔案。

pack://application:,,,/MyResourceFile.xaml

注意事項注意事項

如需應用程式資料檔案和封包 URIs 的詳細資訊,請參閱 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 是否可以巡覽至 XBAPs 檔案並且執行 ([啟用]、[停用] 和 [提示] 選項)。

根據預設,這些設定在 [網際網路]、[近端區域網路] 及 [信任的網站] 區域中都是啟用的,在 [限制的網站] 區域中則是停用的。

安全性相關 WPF 登錄設定

除了可透過 [網際網路選項] 設定的安全性設定以外,下列登錄值可用於選擇性封鎖一些可能有安全疑慮的 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 控制項概觀和教學課程 (英文)。

注意事項注意事項

本節也適用於 Frame 控制項,因為該控制項使用 WebBrowser 來巡覽 HTML 內容。

如果會使用 WPF WebBrowser 控制項來裝載未受信任的 Web 內容,則您的應用程式應該使用部分信任的 AppDomain 來協助將您的應用程式程式碼與潛在的惡意 HTML 指令碼隔離。 如果應用程式會使用 InvokeScript 方法和 ObjectForScripting 屬性來與裝載的指令碼互動,就更需要這麼做。 如需詳細資訊,請參閱 WPF 增益集概觀

如果應用程式會使用 WPF WebBrowser 控制項,另一個可提高安全性並緩和攻擊影響的方法,就是啟用 Internet Explorer 功能控制項。 功能控制項是 Internet Explorer 的附加項目,可供系統管理員與開發人員設定 Internet Explorer 以及裝載 WebBrowser ActiveX 控制項 (由 WPF WebBrowser 控制項所包裝) 之應用程式的功能。 設定功能控制項的方式有使用 CoInternetSetFeatureEnabled 函式或是變更登錄中的值。 如需功能控制項的詳細資訊,請參閱功能控制項簡介 (英文) 和網際網路功能控制項 (英文)。

如果您所開發的獨立 WPF 應用程式會使用 WPF WebBrowser 控制項,則 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 主機安全性的一般建議事項為根據。如需詳細資訊,請參閱 MSHTML 主機安全性常見問題集:上篇 (英文) 和 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

如果您執行的部分信任 XAML browser application (XBAP) 會在 Windows Internet Explorer 中加上 WPF WebBrowser 控制項,則 WPF 會在 Internet Explorer 處理序的位址空間中裝載 WebBrowser ActiveX 控制項。 因為 WebBrowser ActiveX 控制項是裝載於 Internet Explorer 處理序中,所以 Internet Explorer 的所有功能控制項也都會對 WebBrowser ActiveX 控制項啟用。

相較於一般獨立應用程式,在 Internet Explorer 中執行的 XBAP 可獲得額外一層安全性。 其之所以能夠有此額外的安全性,是因為在 Windows Vista 和 Windows 7 上,預設會以受保護模式執行 Internet Explorer (因此及於 WebBrowser ActiveX 控制項)。 如需受保護模式的詳細資訊,請參閱了解及在受保護模式 Internet Explorer 中作業 (英文)。

注意事項注意事項

如果您嘗試執行的 XBAP 會在 Firefox 中加上 WPF WebBrowser 控制項,則在位於 [網際網路] 區域時會擲回 SecurityException。這是由於 WPF 安全性原則的緣故。

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

當 Managed 組件安裝至global assembly cache (GAC) 時,會變成完全受信任的,因為使用者必須明確提供安裝它們的權限。 因為它們是完全受信任的,所以只有完全受信任的 Managed 用戶端應用程式可以使用它們。 若要讓部分信任的應用程式可以使用它們,它們必須有 AllowPartiallyTrustedCallersAttribute (APTCA) 標示。 但是只有在部分信任中經過測試可以安全執行的組件,才應標示這個屬性 (Attribute)。

不過,APTCA 組件可能會在安裝至 GAC 之後才呈現出安全性缺陷。 一旦發現安全性缺陷,組件發行者可以產生安全性更新以修正現有安裝上的問題,並且在發現問題後防範可能造成缺陷的安裝。 更新的解決方法之一是解除安裝組件,不過這樣可能會使得使用該組件的其他完全受信任的用戶端應用程式中斷。

WPF 提供一個機制,可針對部分信任的 XBAPs 停用 APTCA 組件,而不需解除安裝 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 組件不受這種停用方式的影響,因為它們是 Managed 應用程式執行所需的項目。這項停用 APTCA 組件的支援,主要是以協力廠商應用程式為目標。

鬆散 XAML 檔案的沙箱行為

鬆散的 XAML 檔案是全標記的 XAML 檔案,這些檔案並不相依於任何後置程式碼、事件處理常式或應用程式專用組件。 直接從瀏覽器巡覽至鬆散的 XAML 檔案時,這些檔案會根據預設的 [網際網路] 區域權限集合載入至安全性沙箱中。

不過,當從獨立應用程式中的 NavigationWindowFrame 直接巡覽至鬆散的 XAML 檔案時,展現的安全性行為則會不同。

在這兩種情況下,巡覽到的鬆散的 XAML 檔案會繼承其主應用程式的權限。 但是,從安全性角度來看這可能不是好現象,特別是當鬆散的 XAML 檔案是由不信任或未知的實體產生時。 這種內容稱為「外部內容」,FrameNavigationWindow 都可以設為在巡覽至這種內容時加以隔離。 隔離可以藉由將 SandboxExternalContent 屬性 (Property) 設為 true 來達成,如同下列 FrameNavigationWindow 的範例所示:

<Frame 
  Source="ExternalContentPage.xaml" 
  SandboxExternalContent="True">
</Frame>
<!-- Sandboxing external content using NavigationWindow-->
<NavigationWindow 
  xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation" 
  Source="ExternalContentPage.xaml" 
  SandboxExternalContent="True">
</NavigationWindow>

使用這項設定,外部內容載入至的處理序,會與裝載應用程式的處理序不同。 這個處理序只能使用預設的 [網際網路] 區域權限集合,而能有效地與主應用程式和用戶端電腦隔離。

注意事項注意事項

雖然在獨立應用程式中從 NavigationWindowFrame 巡覽至鬆散 XAML 檔案的功能,是以 WPF 瀏覽器裝載基礎結構 (牽涉到 PresentationHost 處理序) 為基礎來實作,但是其安全性層級還是會比直接在 Windows Vista 和 Windows 7 的 Internet Explorer 中載入內容 (仍會透過 PresentationHost) 稍弱一些。這是因為使用 Web 瀏覽器的獨立 WPF 應用程式並不提供 Internet Explorer 所額外提供的 [受保護模式] 安全性功能。

開發具更佳安全性之 WPF 應用程式的相關資源

以下是一些有助於開發具更佳安全性之 WPF 應用程式的其他資源:

區域

資源

Managed 程式碼

應用程式的模式和做法安全性指引

CAS

程式碼存取安全性

ClickOnce

ClickOnce 安全性和部署

WPF

WPF 部分信任安全性

請參閱

概念

WPF 部分信任安全性

WPF 安全性策略 – 平台安全性

WPF 安全性策略 – 安全性工程

程式碼存取安全性

ClickOnce 安全性和部署

XAML 概觀 (WPF)

其他資源

應用程式的模式和做法安全性指引