安全性 (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) 或鬆散的可延伸應用程式標記語言 (XAML) 檔案 如需詳細資訊,請參閱 WPF XAML 瀏覽器應用程式概觀

警告

XBAP 需要舊版瀏覽器才能運作,例如 Internet Explorer 和 Firefox。 Windows 10 和 Windows 11 通常不支援這些舊版瀏覽器版本。 由於安全性風險,新式瀏覽器不再支援 XBAP 應用程式所需的技術。 不再支援啟用 XBAP 的外掛程式。

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

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

本主題包含下列幾節:

安全巡覽

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

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

Relationship between application navigation and browser navigation.

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 屬性,應用程式會巡覽而不涉及使用者。

瀏覽器巡覽安全性

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

  • 使用者巡覽。 用戶藉由單擊 Hyperlink 主要 NavigationWindow內的專案,而不是在巢狀 Frame中巡覽。

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

  • 通訊協定。 所使用的通訊協議為 HTTPHTTPsfilemailto

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

Web 瀏覽軟體安全性設定

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

Internet Explorer 提供一種機制,可讓您設定 Internet Explorer 允許或從 Internet Explorer 執行的功能,包括下列專案:

  • .NET Framework 相依元件

  • ActiveX 控制項和外掛程式

  • 下載

  • 指令碼

  • 使用者驗證

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

  1. 開啟 [控制台]

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

    [網際網路選項] 對話方塊隨即出現。

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

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

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

    Screenshot that shows the Security Settings dialog box.

注意

您也可以從 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 控制項裝載不受信任的 Web 內容時,WPF WebBrowser 提供保護應用程式的一些支援。 不過,某些安全性功能必須由使用 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 控制件的獨立 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 主機安全性的一般建議。 如需詳細資訊,請參閱 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 程式中,Internet Explorer 的所有功能控件也會針對 WebBrowser ActiveX 控件啟用。

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

注意

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

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

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

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

WPF 提供一種機制,讓部分信任的 XBAP 可以停用 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 元件不會透過這種方式停用它們而受到影響,因為受控應用程式需要它們才能執行。 停用 APTCA 組件的支援主要是針對協力廠商應用程式。

鬆散 XAML 檔案的沙箱行為

鬆散的 XAML 檔案是標記專用的 XAML 檔案,不相依於任何程式代碼後置、事件處理程式或應用程式特定元件。 從瀏覽器直接流覽至鬆散的 XAML 檔案時,會根據預設因特網區域許可權集,在安全性沙盒中載入它們。

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

在這兩種情況覽至的鬆散 XAML 檔案會繼承其主應用程式的許可權。 不過,從安全性觀點來看,這種行為可能不理想,特別是如果鬆散的 XAML 檔案是由不受信任或未知的實體所產生。 這種類型的內容稱為外部內容,而且FrameNavigationWindow可以設定為在巡覽至 時加以隔離。 將 SandboxExternalContent 屬性設定為 true 來達成隔離,如 和 NavigationWindow的下列範例Frame所示:

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

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

注意

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

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

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

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

另請參閱