ClickOnce 应用程序的代码访问安全性

更新:2007 年 11 月

ClickOnce 应用程序是基于 .NET Framework 的,受代码访问安全性约束的影响。因此,了解代码访问安全性的含义并编写相应的 ClickOnce 应用程序是十分重要的。

代码访问安全性是 .NET Framework 中的一种机制,它帮助限制代码访问受保护的资源和操作的权限。应始终将 ClickOnce 应用程序的代码访问安全权限配置为只包含应用程序要求的权限。Visual Studio 提供了必要的工具,可确定和配置应用程序的权限集。

默认 ClickOnce 代码访问安全性

ClickOnce 应用程序在客户端计算机上安装或运行时,默认情况下是接收“完全信任”权限。虽然某些情况下确实需要“完全信任”权限,但通常最好不要向应用程序授予“完全信任”权限,这样做的两个重要原因是:

  • 具有“完全信任”权限的应用程序拥有对资源(如文件系统和注册表)的不受限制的访问权。这样,恶意代码就可能会利用您的应用程序(和最终用户的系统)。

  • 当应用程序需要“完全信任”权限时,系统会提示最终用户将该权限授予此应用程序。这意味着应用程序不会真正提供 ClickOnce 体验,并且提示可能会给经验不足的用户带来困惑。

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

    如果从可移动媒体(如 CD-ROM)安装应用程序,则不会提示用户。此外,网络管理员还可以配置网络策略,以便用户从受信任的源安装应用程序时不会出现提示。有关更多信息,请参见受信任的应用程序部署概述

由于上述原因,应始终将应用程序的代码访问安全权限修改为只包含应用程序要求的权限。

配置安全权限

应始终将 ClickOnce 应用程序配置为只要求实际需要的代码访问安全权限。在“项目设计器”的“安全”页上可以配置安全权限。

“项目设计器”的“安全”页包含一个“启用 ClickOnce 安全设置”复选框。当选中此复选框时,安全权限请求会添加到应用程序的部署清单中。在安装时,如果请求的权限超出了部署应用程序的区域的默认权限,则系统会提示此用户授予权限。有关更多信息,请参见 如何:启用 ClickOnce 安全设置

从不同位置部署的应用程序会授予不同级别的权限,而不进行提示。例如,当从 Internet 部署应用程序时,此应用程序会接收到限制性较高的权限集。当从本地 Intranet 进行安装时,此应用程序会接收到更多的权限;当从 CD-ROM 进行安装时,此应用程序会接收到“完全信任”权限。

作为配置权限的第一步,可以从“安全”页的“区域”列表中选择一个安全区域。如果可能会从多个区域部署应用程序,请选择具有最少权限的区域。如果希望在没有任何预设权限的情况下开始,并逐个添加应用程序所需的权限,请选择“自定义”区域。

选择某个区域后,“权限”列表即会进行更新,以显示该区域的默认权限;所包括的权限以绿色选中标记指示。有关更多信息,请参见 如何:为 ClickOnce 应用程序设置安全区域

若要进一步限制权限,则可以选择一个权限集,然后修改其属性。例如,如果应用程序需要显示“文件”->“打开”对话框,则“FileDialogPermission”集授予显示这些对话框的权限。默认情况下,此权限集将启用“文件”->“打开”对话框和“文件”->“保存”对话框。若要对此进行修改,请单击“FileDialogPermission”集,单击“属性”打开“权限设置”对话框,然后将权限设置为“仅打开对话框”。有关更多信息,请参见 如何:设置 ClickOnce 应用程序的自定义权限

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

可以设置的属性因权限集而异;并非所有权限集都具有可配置的属性。

也可以排除不需要的权限集或启用不属于区域默认权限的权限。可以通过从权限集的“设置”列表中选取一个值来实现此目的。已修改的权限将用粗体文本显示。如果已启用某个权限,但它不属于区域默认权限,则会在“包括”选中标记旁添加一个信息图标。

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

启用不属于区域默认权限的权限会导致对最终用户进行提示(如本主题中先前所述)。如果启用附加权限,始终应修改权限集,以便只包括实际需要的权限。

确定应用程序要求的权限

确切地了解应用程序要求哪些权限有助于有效地配置安全权限。可以使用“权限计算器”工具(可从“安全”页获取)来分析代码并确定应用程序要求的确切权限。

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

“权限计算器”工具具有局限性。该工具对代码执行静态分析,无法确定后期绑定代码或动态加载的程序集所需的权限。此外,如果应用程序设计为在权限较少的环境中运行时动态修改其权限要求,则该工具会报告所需的最大权限。

在此工具分析完应用程序之后,所有所需权限将设置为“已启用”并显示为粗体文本。如果某个已启用的权限不属于区域默认权限,则还会用一个警告图标标记此权限。如果要防止系统对最终用户发出提示,应检查这些权限以确定是否可以修改代码以便不再要求相应的权限。

有关更多信息,请参见 如何:确定 ClickOnce 应用程序的权限

调试具有受限权限的应用程序

作为一名开发人员,您很可能会使用“完全信任”权限运行开发计算机。因此,您在调试应用程序时不会看到用户在使用受限权限运行此应用程序时可能会看到的安全异常。

要捕捉这些异常,必须使用与最终用户相同的权限来调试应用程序。在“项目设计器”的“安全”页中,可以启用使用受限权限进行调试。

当使用受限权限调试应用程序时,任何未在“安全”页中启用的代码安全性要求都会引发异常。这时会出现一个异常帮助器,提供有关如何修改代码以防止出现异常的建议。

此外,在编写代码时,代码编辑器中的 IntelliSense 功能会使未包含在已配置的安全权限中的所有成员呈灰色。

有关更多信息,请参见 如何:使用受限权限对 ClickOnce 应用程序进行调试

浏览器承载的应用程序的安全权限

Visual Studio 为 Windows Presentation Foundation (WPF) 应用程序提供下列项目类型:

  • WPF Windows 应用程序

  • WPF Web 浏览器应用程序

  • WPF 自定义控件库

  • WPF 服务库

在这些项目类型中,只有 WPF Web 浏览器应用程序承载于 Web 浏览器中,因此需要特殊的部署和安全设置。这些应用程序的默认安全设置包括:

  • 启用 ClickOnce 安全设置

  • 这是不完全可信的应用程序

  • “Internet 区域”(已选定 WPF Web 浏览器应用程序的默认权限集)

在“高级安全设置”对话框中,“使用选定权限集调试此应用程序”复选框已被选中且被禁用。原因是无法为浏览器承载的应用程序关闭“在区域中调试”。

当使用 ClickOnce 部署 WPF Web 浏览器应用程序时,这些应用程序会请求特定的权限集(存储在 appname.exe.manifest 文件中)。这些权限连同以下其他两个权限,是代码访问安全 Internet 区域权限集中的默认权限:

WebBrowserPermission

MediaPermission

如果设置非默认权限,Visual Studio 将发出一个警告,表明应用程序已配置为要求非默认权限。除非已将安全策略推送到目标计算机,否则安装将失败。

请参见

任务

如何:启用 ClickOnce 安全设置

如何:为 ClickOnce 应用程序设置安全区域

如何:设置 ClickOnce 应用程序的自定义权限

如何:确定 ClickOnce 应用程序的权限

如何:使用受限权限对 ClickOnce 应用程序进行调试

概念

ClickOnce 部署和安全

受信任的应用程序部署概述

参考

”项目设计器“ ->“安全”页