ClickOnce 部署和安全性

更新:2007 年 11 月

使用 ClickOnce 技術部署的應用程式會在「沙箱」(Sandbox) 中執行,亦即根據安全性區域 (Security Zone) 使用有限的使用權限。下表依據部署位置列出預設的使用權限:

部署位置

安全性區域

從 Web 執行

網際網路區域

從 Web 安裝

網際網路區域

從網路檔案共用安裝

內部網路區域

從 CD-ROM 安裝

完全信任

預設的使用權限是根據應用程式原始版本的部署位置而定,此應用程式的更新仍會繼承這些使用權限。如果將應用程式設定為從 Web 或網路位置檢查是否有更新,且發現有新版本可用時,原始安裝程序可能會取得網際網路或內部網路區域的使用權限,而非「完全信任」使用權限。若要避免使用者看到提示,系統管理員可以指定 ClickOnce 部署原則,將特定的應用程式發行者定義為受信任的來源。在部署此原則的電腦上,會自動授與使用權限,因此使用者就不會看到提示。

安全性和使用權限

身為開發人員,您有責任確保您的應用程式能以適當的使用權限執行。

注意事項:

Visual Studio 能讓您在目標安全性區域中替應用程式偵錯,並提供開發安全應用程式的協助。

在某些情況下,ClickOnce 應用程式可能需要更高的使用權限。例如,必須和 Excel 試算表互動的應用程式所需要的使用權限,可能比為網際網路或內部網路區域所定義的使用權限還要高。如果應用程式需要更高的使用權限,安裝時便會提示使用者授與使用權限。如果使用者接受,則會安裝應用程式,如果不接受,則會停止安裝程序。

注意事項:

若要避免使用者看到提示,系統管理員可以指定 ClickOnce 部署原則,將特定的應用程式發行者定義為受信任的來源。在部署此原則的電腦上,使用權限會自動授與,因此使用者就不會看到提示。

應用程式的使用權限是由應用程式資訊清單 <trustInfo> 項目 (ClickOnce 應用程式)中的設定所決定。Visual Studio 會根據專案的 [安全性] 屬性頁自動產生這項資訊。ClickOnce 應用程式只能取得它所要求的特定權限,例如,假設檔案存取需要「完全信任」權限,如果應用程式要求「檔案存取」權限,那麼它只能取得「檔案存取」權限,而不是「完全信任」權限。開發 ClickOnce 應用程式時,您應確定只要求應用程式所需的特定權限。

此外,部署資訊清單必須使用 Authenticode 簽章簽署。在安裝時,根據 Authenticode 簽章的發行者資訊會顯示在使用權限對話方塊中,讓使用者得知此應用程式是來自受信任的來源。Windows Software Development Kit (SDK) 包含檔案簽署工具 (簽署工具 (signtool.exe)),能讓您簽署資訊清單(請注意,簽署工具 signcode.exe 已被取代)。

注意事項:

可在 Visual Studio 2003 及先前版本中使用的簽署功能已從 [安裝和部署] 專案 ([安裝] 專案、[Web 安裝] 專案、[封包] 專案和 [合併模組]) 中移除。如果您將已啟用簽署的 Visual Studio 2003 專案匯入 Visual Studio 2005 中,或者如果您想要為部署專案啟用簽署,則必須在建置後步驟中使用簽署工具 (signtool.exe) 來簽署建置輸出中的檔案。如需這項做法的詳細資訊,請參閱檔案 '<file>' 未簽署

ASP.NET 表單架構驗證

如果您想要控制每一個使用者可以存取的部署,就不應該讓匿名存取部署在 Web 伺服器上的 ClickOnce 應用程式。您應該依據使用者的識別身分 (使用 Windows NT 驗證) 讓使用者存取已經安裝好的部署。

如果要部署至沒有 Windows NT 驗證的環境,一個可能的解決方案是嘗試使用 ASP.NET 表單架構驗證來驗證使用者。不過,ClickOnce 不支援表單架構驗證,因為它會使用持續性的 Cookie;這表示有安全性風險存在,因為 Cookie 會存在於 Internet Explorer 的快取中,而且可能會遭竊取。因此,如果您正在部署 ClickOnce 應用程式,則除了 Windows NT 驗證之外,並不支援其他任何驗證案例。

傳遞引數

如果您需要傳遞引數到 ClickOnce 應用程式中,則還會出現另一種安全性考量。ClickOnce 可讓開發人員提供查詢字串給透過 Web 部署的應用程式。查詢字串會採用一系列位於 URL 結尾的名稱/值組格式,以啟動應用程式:

http://servername.adatum.com/WindowsApp1.application?username=joeuser

查詢字串引數預設是停用狀態。若要啟用查詢字串引數,必須在應用程式的部署資訊清單中設定 trustUrlParameters 屬性 (Attribute)。這個值可以從 Visual Studio 和 MageUI.exe 進行設定。如需如何啟用傳遞查詢字串的詳細步驟,請參閱 HOW TO:在 ClickOnce 應用程式中擷取查詢字串資訊

請絕對不要將透過查詢字串擷取的引數傳遞給資料庫或命令列,而沒有檢查這些引數來確定其是否安全。不安全的引數為包含資料庫或命令列逸出字元 (Escape Character) 的引數,這些引數可讓惡意使用者操縱您的應用程式來執行任意命令。

注意事項:

查詢字串引數是在啟動 ClickOnce 應用程式時傳遞引數給它的唯一方法;您不能從命令列傳遞引數給 ClickOnce 應用程式。

部署模糊化組件

您可能會想要使用 Dotfuscator 模糊化您的應用程式,防止他人對程式碼進行反向工程。不過,組件模糊化功能尚未整合到 Visual Studio IDE 或 ClickOnce 部署程序中;因此,您將需要在部署程序之外執行模糊化,或許是使用建置後步驟。在建置專案後,您要在 Visual Studio 外面手動執行下列步驟:

  1. 使用 Dotfuscator 執行模糊化。如需詳細資訊,請參閱逐步解說:手動部署 ClickOnce 應用程式

  2. 使用 Mage.exe 或 MageUI.exe 產生 ClickOnce 資訊清單並加以簽署。如需詳細資訊,請參閱資訊清單產生和編輯工具 (Mage.exe)圖形用戶端、資訊清單產生和編輯工具 (MageUI.exe)

  3. 手動發行 (複製) 檔案到部署的來源位置 (Web 伺服器、UNC 共用或 CD-ROM)。

請參閱

概念

選擇部署策略

選擇 ClickOnce 部署策略

參考

檔案簽署工具 (Signcode.exe)

其他資源

ClickOnce 部署