ClickOnce 部署和安全

更新:2007 年 11 月

使用 ClickOnce 技术部署的应用程序运行在“沙盒”中,这些应用程序享有的权限受到安全区域的限制。下表列出基于部署位置的默认权限:

部署位置

安全区域

从 Web 运行

Internet 区域

从 Web 安装

Internet 区域

从网络文件共享安装

Intranet 区域

从 CD-ROM 安装

完全信任

默认权限取决于部署初始应用程序版本的位置;应用程序的更新将继承这些权限。如果将应用程序配置为从 Web 或网络位置检查是否有更新且存在较新的版本,则初始安装可以获得 Internet 或 Intranet 区域的权限,而不是完全信任权限。如果不想让系统提示用户,系统管理员可以指定一个 ClickOnce 部署策略,将某个特定的应用程序发行者定义为受信任的来源。对于部署此策略的计算机,系统会自动授予权限而不会提示用户授予权限。

安全和权限

作为开发人员,您有责任确保您的应用程序将以适当的权限运行。

76e4d2xw.alert_note(zh-cn,VS.90).gif说明:

Visual Studio 使您可以在目标安全区域中调试应用程序,并能帮助您开发安全的应用程序。

有时 ClickOnce 应用程序可能需要提升的权限。例如,必须与 Excel 电子表格交互的应用程序所需的权限将超出为 Internet 或 Intranet 区域定义的权限。如果应用程序需要提升权限,程序安装期间系统会提示用户授予权限。如果用户同意授予权限,则将安装应用程序;如果用户不同意,则将停止安装。

76e4d2xw.alert_note(zh-cn,VS.90).gif说明:

如果不想让系统提示用户,系统管理员可以指定一个 ClickOnce 部署策略,将某个特定的应用程序发行者定义为受信任的来源。在部署此策略的计算机上,系统会自动授予权限而不会提示用户授予权限。

应用程序的权限是由应用程序清单的 <trustInfo> 元素(ClickOnce 应用程序) 元素中的设置决定的。Visual Studio 可以根据项目的“安全”属性页中的设置自动生成此信息。ClickOnce 应用程序仅被授予它所请求的特定权限。例如,文件访问需要完全信任权限时,如果应用程序请求文件访问权限,则它仅被授予文件访问权限,而不会被授予完全信任权限。开发 ClickOnce 应用程序时,应确保只请求应用程序需要的特定权限。

此外,应使用 Authenticode 签名对部署清单进行签名。安装期间权限对话框将向用户显示基于 Authenticode 签名的发行者信息,以向用户表明该应用程序来自受信任的来源。Windows 软件开发工具包 (SDK) 包含一个文件签名工具(签名工具 (SignTool.exe)),使您可以对清单进行签名。(注意:签名工具 signcode.exe 已被否决。)

76e4d2xw.alert_note(zh-cn,VS.90).gif说明:

Visual Studio 2003 及早期版本中提供的签名功能已从“安装和部署”项目(“安装”项目、“Web 安装”项目、“Cab”项目和“合并模块”)中移除。如果已将启用了签名的 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。此值可通过 Visual Studio 和 MageUI.exe 来设置。有关如何启用传递查询字符串的详细步骤,请参见如何:在 ClickOnce 应用程序中检索查询字符串信息

在未检查参数以确保参数安全的情况下,决不要将通过查询字符串检索的参数传递给数据库或命令行。不安全参数是包含数据库或命令行转义符的参数,这些转义符可以让恶意用户操纵应用程序执行任意命令。

76e4d2xw.alert_note(zh-cn,VS.90).gif说明:

查询字符串参数是在启动时向 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 部署