ClickOnce 應用程式受限於 .NET Framework 中的程式代碼存取安全性限制,以協助限制程式代碼必須保護資源和作業的存取。 因此,請務必瞭解程式代碼存取安全性的影響,以便據此撰寫 ClickOnce 應用程式。 您的應用程式可以使用完全信任或使用部分區域,例如因特網和內部網路區域來限制存取。
此外,ClickOnce 會使用憑證來驗證應用程式的發行者真實性,以及簽署應用程式和部署指令清單,以證明檔案尚未遭到竄改。 簽署是選擇性步驟,可讓您更輕鬆地在產生指令清單之後變更應用程式檔。 不過,如果沒有已簽署的指令清單,很難確保應用程式安裝程式不會在中間人安全性攻擊中遭到竄改。 基於這個理由,我們建議您簽署應用程式和部署指令清單,以協助保護您的應用程式。
區域
使用 ClickOnce 技術部署的應用程式僅限於安全性區域所定義的一組許可權和動作。 安全性區域是在瀏覽器中定義,且是以應用程式的位置為基礎。 下表根據部署位置列出預設權限:
| 部署位置 | 安全性區域 |
|---|---|
| 從 Web 執行 | 網際網路區域 |
| 從 Web 安裝 | 網際網路區域 |
| 從網路檔案共享安裝 | 本地內部網路區域 |
| 從 CD-ROM 安裝 | 完全信任 |
默認許可權是以部署應用程式原始版本的位置為基礎;應用程式的更新會繼承這些許可權。 如果應用程式設定為檢查來自網路或 Web 位置的更新,而且有較新版本可用,原始安裝可以獲得網際網路或內部網路區域的權限,而不是完全信任權限。 若要防止提示使用者,系統管理員可以指定 ClickOnce 部署原則,將特定應用程式發行者定義為受信任的來源。 針對部署此原則的計算機,系統會自動授與許可權,且不會提示使用者。 如需詳細資訊,請參閱 信任的應用程式部署概觀。 若要設定受信任的應用程式部署,可以將憑證安裝到計算機或企業層級。 如需詳細資訊,請參閱 如何:將受信任的發行者新增至 ClickOnce 應用程式的用戶端電腦。
備註
在適用於 .NET Core 和 .NET 5 或更新版本的 ClickOnce 中,不支援此功能。 如需詳細資訊,請參閱 ClickOnce for .NET。
程式代碼存取安全策略
應用程式的許可權取決於應用程式指令清單中< trustInfo> Element 元素中的設定。 Visual Studio 會根據專案 [安全性 ] 屬性頁面上的設定自動產生這項資訊。 ClickOnce 應用程式只會獲授與其要求的特定許可權。 例如,如果檔案存取需要完全信任許可權,如果應用程式要求檔案訪問許可權,它只會獲得檔案訪問許可權,而不是完全信任許可權。 開發 ClickOnce 應用程式時,您應該確定您只要求應用程式所需的特定許可權。 在大部分情況下,您可以使用因特網或近端內部網路區域,將應用程式限制為部分信任。 如需詳細資訊,請參閱 如何:設定 ClickOnce 應用程式的安全性區域。 如果您的應用程式需要自定義許可權,您可以建立自定義區域。 如需詳細資訊,請參閱 如何:設定 ClickOnce 應用程式的自定義許可權。
備註
在適用於 .NET Core 和 .NET 5 或更新版本的 ClickOnce 中,不支援程式代碼存取安全性。 在 .NET Framework 中,使用程式代碼存取安全性不是最佳做法,不建議使用。
包含不在應用程式部署區域預設許可權集中的許可權,將會導致最終使用者在安裝或更新時收到提示,以授予該許可權。 若要防止提示使用者,系統管理員可以指定 ClickOnce 部署原則,將特定應用程式發行者定義為受信任的來源。 在部署此原則的計算機上,系統會自動授與許可權,而且不會提示使用者。
身為開發人員,您必須負責確定您的應用程式會以適當的許可權執行。 如果應用程式在運行時間要求區域外部的許可權,可能會顯示安全性例外狀況。 Visual Studio 可讓您在目標安全性區域中對應用程式進行偵錯,並提供開發安全應用程式的協助。 如需詳細資訊,請參閱 針對使用 System.Deployment.Application 的 ClickOnce 應用程式進行偵錯。
如需程式代碼存取安全性和 ClickOnce 的詳細資訊,請參閱 ClickOnce 應用程式的程式代碼存取安全性。
程式碼簽署憑證
若要使用 ClickOnce 部署發布應用程式,您可以使用公開/私鑰組來簽署應用程式的應用程式和部署指令清單。 簽署指令清單的工具可在項目設計工具的 [簽署] 頁面上取得。 如需詳細資訊,請參閱 簽署頁面、項目設計工具。
簽署指令清單之後,根據 Authenticode 簽章的發行者資訊會在安裝過程中的權限對話方塊中顯示給使用者,以展示應用程式來自可信賴的來源。
如需 ClickOnce 和憑證的詳細資訊,請參閱 ClickOnce 和 Authenticode。
ASP.NET 表單型驗證
如果您想要控制每位使用者可以存取的部署,則不應該啟用 Web 伺服器上所部署 ClickOnce 應用程式的匿名存取。 相反地,您會使用 Windows 驗證,讓使用者能夠存取您已根據使用者的身分識別所安裝的部署。
ClickOnce 不支援 ASP.NET 窗體型驗證,因為它使用持續性 Cookie;這些都存在安全性風險,因為它們位於瀏覽器快取中,而且可能會遭到駭客攻擊。 因此,如果您要部署 ClickOnce 應用程式,則不支援 Windows 驗證以外的任何驗證案例。
傳遞引數
如果您必須將自變數傳遞至 ClickOnce 應用程式,就會發生額外的安全性考慮。 ClickOnce 可讓開發人員提供查詢字串給透過 Web 部署的應用程式。 查詢字串採用一系列名稱/值組的形式,位於用來啟動應用程式的 URL 結尾:
http://servername.adatum.com/WindowsApp1.application?username=joeuser
根據預設,會停用查詢字串自變數。 若要加以啟用,必須在應用程式的部署指令清單中設定 屬性 trustUrlParameters 。 此值可以從 Visual Studio 和 MageUI.exe設定。 如需如何啟用傳遞查詢字串的詳細步驟,請參閱 如何:在在線 ClickOnce 應用程式中擷取查詢字串資訊。
您絕對不應該將透過查詢字串擷取的自變數傳遞至資料庫或命令行,而不需要檢查自變數,以確保這些自變數是安全的。 不安全的參數是那些包含可能允許惡意使用者操作應用程式以執行任意命令的資料庫或命令行界面中使用的逸出字元。
備註
查詢字串自變數是啟動時將自變數傳遞至 ClickOnce 應用程式的唯一方法。 您無法從命令列將自變數傳遞至 ClickOnce 應用程式。
部署模糊化組件
Visual Studio 包含免費的 PreEmptive Protection - Dotfuscator Community,您可以透過程式碼模糊化和主動保護措施來保護 ClickOnce 應用程式。 如需詳細資訊,請參閱 Dotfuscator 社群使用者指南的 ClickOnce 一節。