Windows Presentation Foundation 安全性

更新:2007 年 11 月

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

WPF 獨立應用程式會以不受限的權限執行 (CAS FullTrust 權限集合),不論部署方法是使用 Windows Installer (.msi)、DOS XCopy 或 ClickOnce。

WPF 瀏覽器裝載的應用程式是由 Windows Internet Explorer 裝載,而且可以是 XAML 瀏覽器應用程式 (XBAP) 或鬆散的可延伸標記語言 (XAML) (請參閱 Windows Presentation Foundation XAML 瀏覽器應用程式概觀)。

WPF 瀏覽器裝載的應用程式會以部分信任安全性沙箱執行,根據預設,會限制為預設 CAS Internet 權限集合。這樣會將 WPF 瀏覽器裝載的應用程式有效地與用戶端機器隔離,方法就像隔離平常的 Web 應用程式一樣。部分信任安全性在 Windows Presentation Foundation 部分信任安全性中有更詳細的說明。

這個主題包含下列章節。

  • 安全巡覽
  • Internet Explorer 安全性設定
  • 針對部分信任的用戶端應用程式停用 APTCA 組件
  • 沙箱化外部鬆散的 XAML
  • 開發安全 WPF 應用程式的最佳做法
  • 相關主題

安全巡覽

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

「應用程式巡覽」是指在瀏覽器裝載的應用程式內,對內容項目的巡覽,而「瀏覽器巡覽」是指會變更瀏覽器本身內容的巡覽。應用程式範圍和瀏覽器範圍的巡覽之間的關係會顯示在下圖中:

巡覽圖表

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

應用程式巡覽安全性

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

  • 資源檔:以 Resource 的組建類型加入至專案的檔案,可以用如下所示的 URI 識別:

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

  • 內容檔:以 Content 的組建類型加入至專案的檔案,可以用如下所示的 URI 識別:

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

  • Site of Origin (SoO) 檔:以 None 的組建類型加入至專案的檔案,可以用如下所示的 URI 識別:

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

  • 應用程式程式碼檔案:以 Page 的組建類型加入至專案的檔案,可以用如下所示的 URI 識別:

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

注意事項:

如需應用程式資料檔案和封包 URI 的詳細資訊,請參閱 Windows Presentation Foundation 應用程式資源、內容及資料檔案

這些內容類型的檔案可以做為使用者巡覽或程式設計巡覽的結果來瀏覽:

  • 使用者巡覽:使用者按一下 Hyperlink 項目導致的巡覽。

  • 程式設計巡覽:應用程式導致的巡覽,與使用者無關。

瀏覽器巡覽安全性

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

  • 使用者巡覽:使用者按一下 Hyperlink 項目導致的巡覽。

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

  • 通訊協定:要使用的通訊協定是 http:https:file:mailto:

如果 XBAP 以不符合上述情況的方式來巡覽內容,就會引發 SecurityException

Internet Explorer 安全性設定

Internet Explorer 提供一個機制,可供您設定 Internet Explorer 可以執行的功能,包括:

  • 依賴 .NET Framework 的元件

  • ActiveX 控制項和外掛程式

  • 下載

  • 指令碼

  • 使用者驗證

某個功能是否可以執行和其執行的方式,是由安全性設定決定。您可以設定安全性設定以完全啟用或停用某個功能,或在每次該功能嘗試執行時提示使用者做決定。

可以用這樣的方式保護的功能集合是針對個別區域進行設定,例如 [網際網路]、[內部網路]、[信任的網站] 及 [限制的網站] 區域。您可以藉由下列方法設定安全性設定:

  1. 開啟 Internet Explorer

  2. 按一下 [工具] 功能表上的 [選項] | [安全性]。

  3. 選取要設定安全性設定的區域。

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

[安全性設定] 對話方塊隨即開啟,供您設定選取之區域的安全性設定。

安全性設定對話方塊

Windows Internet Explorer 7 包含下列四個特別針對 .NET Framework 的安全性設定:

  • 鬆散的 XAML:控制 Internet Explorer 7 是否可以巡覽至鬆散的 XAML 檔案並且加以使用 ([啟用]、[停用] 和 [提示] 選項)。

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

  • XPS 文件:控制 Internet Explorer 7 是否可以巡覽至 XML Paper Specification (XPS) 文件並且載入 ([啟用]、[停用] 和 [提示] 選項)。

  • 啟用 .NET Framework 安裝程式:控制是否可以透過 Internet Explorer 7 安裝 .NET Framework (只有 [啟用] 或 [停用] 選項)。

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

IE6 及先前版本的安全性設定

對於非 Internet Explorer 的 Internet Explorer 版本,各種 .NET Framework 相關的安全性設定都可以從「登錄」來設定,機碼如下:

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 表示允許。

XPSDocumentsDisallow

REG_DWORD

1 表示不允許,0 表示允許。

MediaAudioDisallow

REG_DWORD

1 表示不允許,0 表示允許。

MediaImageDisallow

REG_DWORD

1 表示不允許,0 表示允許。

MediaVideoDisallow

REG_DWORD

1 表示不允許,0 表示允許。

注意事項:

在這些設定中,XBAPDisallowWebBrowserDisallow 適用於所有版本的 Internet Explorer。

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

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

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

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

沙箱化外部鬆散的 XAML

鬆散的 XAML 檔案是徒具標記形式的 .xaml 檔案,無法以封包 URI 識別 (請參閱 Windows Presentation Foundation 中的 Pack URI)。這表示它們不是資源檔、內容檔,也不是 SoO 檔 (請參閱 Windows Presentation Foundation 應用程式資源、內容及資料檔案)。

當直接從 Internet Explorer 巡覽至鬆散的 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>

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

開發安全 WPF 應用程式的最佳做法

若要建置安全的 WPF 應用程式,需要套用下列最佳做法:

請參閱

概念

Windows Presentation Foundation 部分信任安全性

Windows Presentation Foundation 安全性策略 – 平台安全性

Windows Presentation Foundation 安全性策略 – 安全性工程

ClickOnce 部署概觀

XAML 概觀

其他資源

應用程式的模式和做法安全性指引 (英文)

程式碼存取安全性