Windows Presentation Foundation 部分信任安全性

更新: 2008 年 7 月

一般來說,應該禁止網際網路應用程式直接存取重要系統資源,以防產生惡意損害。根據預設,HTML 和用戶端指令碼語言無法存取重要系統資源。因為 Windows Presentation Foundation (WPF) 瀏覽器裝載的應用程式可以從瀏覽器啟動,所以應該要受到類似的限制。若要強制執行這些限制,WPF 會依賴程式碼存取安全性 (CAS) 和 ClickOnce (請參閱 Windows Presentation Foundation 安全性策略 – 平台安全性)。根據預設,瀏覽器裝載的應用程式會要求 [網際網路] 區域 CAS 權限集合,不論這些應用程式是從網際網路、近端內部網路或本機電腦啟動。不是以完整權限集合執行的應用程式就是所謂的以部分信任執行。

WPF 提供各種的支援,確保有最多的功能能夠安全地在部分信任的應用程式中使用,與 CAS 搭配使用則提供針對部分信任的額外程式設計支援。

這個主題包含下列章節。

  • WPF 功能部分信任支援
  • 部分信任程式設計
  • 管理使用權限
  • 相關主題

WPF 功能部分信任支援

下表概略列出 Windows Presentation Foundation (WPF) 的功能,這些功能可以安全地在 [網際網路] 區域權限集合限制之下使用。

表 1:可以在部分信任下安全使用的 WPF 功能

功能區域

功能

一般

瀏覽器視窗

原始站台存取

IsolatedStorage (512KB 限制)

UIAutomation 提供者

命令

輸入法 (IME)

Tablet 手寫筆和筆墨/筆跡

使用滑鼠捕捉和移動事件模擬拖放

OpenFileDialog

XAML 還原序列化 (透過 XamlReader.Load)

Web 整合

瀏覽器下載對話方塊

最上層使用者啟始的巡覽

mailto:links

統一資源識別元參數

HTTPWebRequest

IFRAME 中裝載的 WPF 內容

使用框架裝載相同站台的 HTML 網頁

使用 WebBrowser 裝載相同站台的 HTML 網頁

Web 服務 (ASMX)

Web 服務 (使用 Windows Communication Foundation)

視覺效果

2D 和 3D

動畫

媒體 (原始站台和跨網域)

影像/音訊/視訊

讀取

FlowDocument

XPS 文件

內嵌和系統字型

CFF 和 TrueType 字型

編輯

拼字檢查

RichTextBox

純文字和筆墨/筆跡剪貼簿支援

使用者啟始的貼上

複製選取的內容

控制項

一般控制項

上表涵蓋概略的 WPF 功能。如需詳細資訊,請參閱 Windows Software Development Kit (SDK) 文件中有關於每個 WPF 成員所需權限的說明。此外,下列功能也具有關於部分信任執行的詳細資訊,包括特殊考量:

下表概述無法安全地在 [網際網路] 區域權限集合限制之下執行的 WPF 功能:

表 2:在部分信任下不安全的 WPF 功能

功能區域

功能

一般

視窗 (應用程式定義的視窗和對話方塊)

SaveFileDialog

檔案系統

登錄存取

拖放

XAML 序列化 (透過 XamlWriter.Save)

UIAutomation 用戶端

來源視窗存取 (HwndHost)

完全語音支援

Windows Form 互通性

Web 整合

指令碼

文件物件模型

視覺效果

點陣圖效果

影像編碼

編輯

RTF 剪貼簿

完全 XAML 支援

部分信任程式設計

對於 XBAP 應用程式,超過預設 [網際網路] 區域權限集合的程式碼會被 CAS 偵測到,並且會導致安全性例外狀況引發及應用程式結束。雖然這樣可以保護使用者,但是無法提供最佳的使用者經驗。

一般來說,會超過允許之權限的程式碼通常都是供獨立應用程式和瀏覽器裝載的應用程式共用的通用程式碼。CAS 和 WPF 提供數個方法可以管理這個案例。

使用 CAS 偵測權限

在某些情況下,程式庫組件中的共用程式碼可能同時由獨立應用程式和 XBAP 兩者使用。在這些情況下,程式碼執行功能時需要的權限可能會比應用程式權限集合所允許的權限還多。您的應用程式可以使用 Microsoft .NET Framework 安全性來偵測它是否有特定的權限。體來說,它可以在期望有某特定權限的執行個體上呼叫 Demand 方法來測試是否具有特定權限。這會顯示在下列範例中,其中的程式碼會查詢它是否有權將檔案儲存至本機磁碟:

如果應用程式沒有所需的權限,這個 Demand 呼叫會擲回安全性例外狀況。否則,就表示已授與權限。IsPermissionGranted 會封裝這個行為,並依適當情況傳回 true 或 false。

功能上非失誤性降低

遇到能夠從不同區域執行的程式碼時,如果能夠偵測該程式碼是否有權執行需要的作業,將有很大的幫助。偵測區域是一回事,如果可能的話最好能夠提供替代方法給使用者。例如,完全信任的應用程式通常可以讓使用者在任何位置建立檔案,而部分信任應用程式則只能在獨立的儲存區中建立檔案。如果由完全信任 (獨立應用程式) 和部分信任 (瀏覽器裝載的應用程式) 兩者共用的組件 (.dll) 中,有建立檔案的程式碼,而且這兩種應用程式都想讓使用者可以建立檔案,則共用程式碼應先偵測它是在部分信任或完全信任下執行,再於適當位置建立檔案。下列程式碼會示範這兩種情形:

在許多情況下,您應該可以找到部分信任替代方法。

在受控制的環境中,例如內部網路,自訂 Managed 架構可以跨用戶端群安裝至全域組件快取 (GAC) 中。這些程式庫可能會執行需要完全信任的程式碼,並且透過 AllowPartiallyTrustedCallersAttribute 由只擁有部分信任的應用程式參考 (如需詳細資訊,請參閱 Windows Presentation Foundation 安全性Windows Presentation Foundation 安全性策略 – 平台安全性)。

瀏覽器裝載偵測

使用 CAS 檢查權限,是在需要以個別權限基準做檢查時相當適合的方法。雖然這個方法依賴攔截例外狀況做為正常處理程序的一部分,但不建議在一般作業中使用,而且會有效能問題。相反地,如果您的 XAML 瀏覽器應用程式 (XBAP) 只在 [網際網路] 區域沙箱中執行,可以使用 BrowserInteropHelper.IsBrowserHosted,它會針對 XAML 瀏覽器應用程式 (XBAP) 傳回 true。

請參閱 偵測是否為瀏覽器裝載範例

注意事項:

IsBrowserHosted 只會區分應用程式是否是在瀏覽器中執行,不會區分執行所使用的權限集合。

管理使用權限

根據預設,XBAP 會以部分信任執行 (預設 [網際網路] 區域權限集合)。不過,根據應用程式需求的不同,可能會變更預設的權限集合。例如,XBAP 如果是從近端內部網路啟動,就可以運用更高的權限集合,如下表所示。

表 3:近端內部網路和網際網路權限

權限

屬性

近端內部網路

網際網路

DNS

存取 DNS 伺服器

環境變數

讀取

檔案對話方塊

開啟

檔案對話方塊

不受限

隔離儲存區

依據使用者的組件隔離

隔離儲存區

未知的隔離

隔離儲存區

無限制的使用者配額

媒體

安全音訊、視訊及影像

列印

預設列印

列印

安全列印

反映

發出

安全性

Managed 程式碼執行

安全性

判斷提示授與的權限

使用者介面

不受限

使用者介面

安全的最上層視窗

使用者介面

專屬的剪貼簿

Web 瀏覽器

至 HTML 的安全架構巡覽

如果您需要增加權限,可以使用下列其中一個工具:

如果您的 XBAP 需要完全信任,可以使用相同的工具增加要求的權限,不過 XBAP 只有在安裝在本機電腦和從本機電腦啟動時,只會獲得完全信任。這表示您不會保有將 XBAP 發佈至 Web 伺服器時會獲得的自動更新支援。

請參閱

概念

Windows Presentation Foundation 安全性

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

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

變更記錄

日期

記錄

原因

2008 年 7 月

加入新 WebBrowser 控制項的說明。

SP1 功能變更。