Share via


Windows Form 中的安全性概觀

更新:2007 年 11 月

在 .NET Framework 發行之前,所有在使用者電腦上執行的程式碼都具有相同的權限或使用權限,可以存取電腦使用者所擁有的資源。例如,如果使用者可以存取檔案系統,程式碼就可以存取檔案系統;如果使用者可以存取某個資料庫,程式碼就可以存取該資料庫。雖然使用者已明確安裝在本機電腦上的可執行檔程式碼可接受這些權限或使用權限,但是,來自網際網路或近端內部網路的潛在惡意程式碼則不能接受。這類程式碼如果沒有取得使用權限,就無法存取使用者的電腦資源。

.NET Framework 引入了一種稱為「程式碼存取安全性」的基礎結構,可以讓您區分程式碼所擁有的使用權限 (或權限) 以及使用者所擁有的權限。根據預設,來自網際網路和內部網路的程式碼只能在所謂的部分信任環境中執行。部分信任會使應用程式受到許多限制,包括應用程式存取本機硬碟會受限制,以及不能執行 Unmanaged 程式碼等等。.NET Framework 控制程式碼所能存取的資源是根據該程式碼的識別 (Identity),包括程式碼的來源、程式碼是否含有強式名稱的組件、程式碼是否以憑證簽署等等。

用來部署 Windows Form 應用程式的 ClickOnce 技術,可以讓您更輕鬆地開發要在部分信任環境、完全信任環境或具有更高使用權限的部分信任環境中執行的應用程式。ClickOnce 提供了「使用權限升級」(Permission Elevation) 和「受信任的應用程式部署」(Trusted Application Deployment) 等功能,讓應用程式能夠以可信賴的方式向本機使用者要求完全信任或更高的使用權限。

了解 .NET Framework 中的安全性

程式碼存取安全性讓程式碼可以受到不同程度的信任,而這端視程式碼的來源和程式碼識別的其他層面而定。如需 Common Language Runtime 用來判斷安全性原則之辨識項 (Evidence) 的詳細資訊,請參閱辨識項。它可以保護電腦系統不受惡意程式碼的破壞,也可以防止受信任的程式碼有意或無意地破壞安全性。由於程式碼存取安全性也可以讓您只將必要的使用權限指定給應用程式,因此您可以更精確地掌控哪些是應用程式可以執行的動作。所有以 Common Language Runtime 為目標的 Managed 程式碼都會受到程式碼存取安全性的影響,即使程式碼沒有執行單一程式碼存取安全性使用權限檢查,也會受到影響。如需 .NET Framework 中安全性的詳細資訊,請參閱重要的安全性概念程式碼存取安全性的基本概念

如果使用者直接從 Web 伺服器或檔案共用執行 Windows Form 可執行檔,則授與應用程式的信任等級將視程式碼的所在位置及啟動方式而定。當應用程式執行時,它的使用權限會自動提高,並且從 Common Language Runtime 取得具名使用權限集合。根據預設,來自本機電腦的程式碼可取得完全信任的使用權限集合,來自近端網路的程式碼可取得近端內部網路的使用權限集合,而來自網際網路的程式碼則可取得網際網路的使用權限集合。

注意事項:

在 .NET Framework 1.0 版 Service Pack 1 和 Service Pack 2 中,網際網路區域程式碼群組會取得 Nothing 使用權限集合。在 .NET Framework 的所有其他版本中,網際網路區域程式碼群組會取得網際網路的使用權限集合。

這些每個使用權限集合中所授與的預設使用權限,有列於預設安全性原則主題中。應用程式能否正常執行,或者會產生安全性例外狀況,則需視應用程式取得的使用權限而定。

許多 Windows Form 應用程式都會使用 ClickOnce 來進行部署。用來產生 ClickOnce 部署的工具,其安全性預設值與之前討論的不同。如需詳細資訊,請參閱下列討論內容。

由於安全性原則可能經過修改,因此實際授與應用程式的使用權限可能會與預設值不同,也就是說,應用程式可能在某部電腦上擁有使用權限,但是在另一部電腦上則沒有。

開發更安全的 Windows Form 應用程式

安全性在應用程式開發的所有步驟中都很重要。首先,請仔細閱讀並遵照安全程式碼撰寫方針中的指示去做。

接著,請決定應用程式必須在完全信任的環境中執行,還是要在部分信任的環境中執行。如果是在完全信任的環境中執行應用程式,那麼在本機電腦上存取資源將會比較容易,但是如果您未嚴格遵守<安全程式碼撰寫方針>主題中的指示設計和開發應用程式,將會使應用程式及其使用者曝露在極大的安全性風險下。如果是在部分信任的環境中執行應用程式,您就可以更輕鬆地開發更安全的應用程式並且大幅降低風險,不過對於某些功能的實作方式將需要更仔細的規劃。

如果您選擇部分信任的環境 (也就是網際網路或近端內部網路的使用權限集合),請決定應用程式在這種環境中的行為方式。Windows Form 在非完全信任的環境中,提供實作功能更安全的替代方式。在部分信任和完全信任的環境中,應用程式某些部分 (例如資料存取) 的設計與撰寫方式可能會有所不同。有些 Windows Form 功能 (例如應用程式設定) 是針對在部分信任的環境中使用而設計的。如需詳細資訊,請參閱應用程式設定概觀

如果應用程式所需的使用權限超過部分信任環境所允許的範圍,但是您又不想在完全信任的環境中執行,只要再判斷提示 (Assert) 您所需要的其他使用權限,就可以在部分信任的環境中執行了。例如,如果您想要在部分信任的環境中執行,但是必須授與應用程式對使用者檔案系統中某個目錄的唯讀存取權限,可以只針對該目錄要求 FileIOPermission。只要正確使用,這種方式可以提高應用程式的功能,並且降低使用者所面臨的安全性風險。

當您開發要在部分信任環境中執行的應用程式時,請追蹤記錄應用程式執行時所必須具備的使用權限以及應用程式可選擇的使用權限。在知道所有的使用權限之後,應該在應用程式層級針對使用權限進行宣告式要求。要求使用權限時,會告知 .NET Framework 執行階段哪些是應用程式需要的使用權限,以及哪些是明確不需要的使用權限。如需要求使用權限的詳細資訊,請參閱要求使用權限使用權限要求

當您要求選擇性的使用權限時,如果應用程式執行了某個動作,但是並未取得所需的使用權限,這時將會產生安全性例外狀況,您必須要加以處理才行。要適當處理 SecurityException 才能確保應用程式可以繼續正常運作。您的應用程式可以使用例外狀況,判斷是否應該為使用者停用某項功能。例如,如果應用程式未取得必要的檔案使用權限,可以停用 [儲存] 功能表選項。

有時候很難判斷出您是否已判斷提示所有適當的使用權限。例如,表面上看起來無害的方法呼叫,可能會在執行期間的某個階段存取檔案系統。如果您沒有以所有必要的使用權限來部署應用程式,當您在桌面進行偵錯時測試結果可能是正常的,但是部署時卻失敗。.NET Framework 2.0 SDK 和 Visual Studio 2005 都有工具可用來計算應用程式所需的使用權限,分別是 MT.exe 命令列工具和 Visual Studio 的「計算使用權限」功能。

下列主題將說明其他的 Windows Form 安全性功能。

主題

說明

說明如何在部分信任的環境中存取檔案和資料。

說明如何在部分信任的環境中存取列印功能。

說明如何在部分信任的環境中執行視窗管理、使用剪貼簿,以及呼叫 Unmanaged 程式碼。

以適當的使用權限部署應用程式

將 Windows Form 應用程式部署至用戶端電腦,最常見的方式就是使用 ClickOnce,這是一種部署技術,它會說明應用程式執行時所需要的所有元件。ClickOnce 會使用稱為「資訊清單」的 XML 檔案來說明構成應用程式的組件和檔案,也會列出應用程式所需要的使用權限。

ClickOnce 有兩種技術可用來在用戶端電腦上要求更高的使用權限。這兩種技術都必須用到 Authenticode 憑證。這些憑證可以讓使用者確信應用程式是來自於受信任的來源。

下表會說明這些技術。

更高的使用權限技術

說明

使用權限升級

在應用程式第一次執行時,為使用者提示一個安全性對話方塊。[使用權限升級] 對話方塊會告知使用者應用程式是誰發行的,讓使用者能夠在充分了解的情況下決定是否要授與更多的信任。

受信任的應用程式部署

需要由系統管理員執行一次安裝,將發行者的 Authenticode 憑證安裝到用戶端電腦上。安裝完之後,任何以該憑證簽署的應用程式都會被視為受信任的,不需要其他提示就能以完全信任的使用權限在本機電腦上執行。

至於要選擇哪一種技術,則需視部署環境而定。如需詳細資訊,請參閱選擇 ClickOnce 部署策略

根據預設,使用 Visual Studio 或 .NET Framework 2.0 SDK 工具 (Mage.exe 和 MageUI.exe) 部署的 ClickOnce 應用程式,會設定為要在具有完全信任使用權限的用戶端電腦上執行。如果您是使用部分信任的使用權限或者只使用某些額外的使用權限來部署應用程式,必須變更這個預設值。您可以在設定部署時使用 Visual Studio 或 .NET Framework 2.0 SDK 工具 MageUI.exe 進行這項變更。如需如何使用 MageUI.exe 的詳細資訊,請參閱<逐步解說:從命令列部署 ClickOnce 應用程式>。

如需 ClickOnce 安全性方面及「使用權限升級」的詳細資訊,請參閱 ClickOnce 部署和安全性。如需「受信任的應用程式部署」的詳細資訊,請參閱受信任的應用程式部署概觀

測試應用程式

如果您已經使用 Visual Studio 部署了 Windows Form 應用程式,可以在開發環境中以部分信任或受限制的使用權限集合啟用偵錯。

請參閱

概念

程式碼存取安全性的基本概念

ClickOnce 部署概觀

受信任的應用程式部署概觀

參考

資訊清單產生和編輯工具 (Mage.exe)

圖形用戶端、資訊清單產生和編輯工具 (MageUI.exe)

其他資源

Windows Form 的安全性