Windows 窗体中的安全性概述

在 .NET Framework 以前的版本中,用户计算机上运行的所有代码对该计算机上的资源具有与用户相同的访问权限。 例如,如果允许用户访问文件系统,则也允许代码访问文件系统;如果允许用户访问一个数据库,则也允许代码访问该数据库。 虽然对于用户在本地计算机上显式安装的可执行代码,这些权限是可接受的,但对于来自 Internet 或本地 Intranet 的潜在恶意代码,则不应授予这些权限。 如果此代码没有相应的权限,则不能访问用户的计算机资源。

.NET Framework 引入了一种称为“代码访问安全性”的基础结构,您可以通过它将代码具有的权限与用户具有的权限区分开来。 默认情况下,来自 Internet 和 Intranet 的代码只能在称为“部分信任”的环境中运行。 部分信任使应用程序受到一系列限制:如应用程序受到访问本地硬盘的限制,以及无法运行非托管代码,等等。 .NET Framework 根据代码所具有的标识(代码的来源、它是否具有 具有强名称的程序集,以及它是否具有证书签名等)来控制代码可以访问的资源。

ClickOnce 技术可用于部署 Windows 窗体应用程序,帮助您更轻松地开发在部分信任模式、完全信任模式或带有提升的权限的部分信任模式中运行的应用程序。 ClickOnce 提供了类似权限提升和受信任的应用程序部署的功能,以便您的应用程序能够以负责任的方式从本地用户请求完全信任或提升的权限。

理解 .NET Framework 中的安全性

代码访问安全性使代码可以根据它所来自的位置以及代码标识的其他方面,获得不同等级的受信度。 有关公共语言运行时用来确定安全策略的证据的更多信息,请参见证据。 它有助于保护计算机系统免受恶意代码的攻击,并保护受信任的代码以使其安全性免受有意或无意的危害。 代码访问安全性还可让您应用程序可以执行的操作进行更好的控制,原因是您可以仅指定您需要应用程序具有的权限。 代码访问安全性将影响面向公共语言运行时的所有托管代码,即使该代码不执行代码访问安全性权限的单项检查。 有关 .NET Framework 中的安全性的更多信息,请参见重要的安全性概念代码访问安全性基础知识

如果用户直接从 Web 服务器或文件共享运行 Windows 窗体可执行文件,则授予应用程序的信任度取决于代码驻留的位置及其启动方式。 当应用程序运行时,它将自动进行计算并接收来自公共语言运行时中的一个命名权限集。 默认情况下,来自本地计算机的代码被授予“完全信任”权限集,来自本地网络的代码被授予“本地 Intranet”权限集,而来自 Internet 的代码被授予“Internet”权限集。

提示

在 .NET Framework 版本 1.0 Service Pack 1 和 Service Pack 2 中,Internet 区域代码组将收到“无”权限集。 在 .NET Framework 的所有其他版本中,Internet 区域代码组将收到“Internet”权限集。

默认安全策略主题中列出了每个这些权限集中授予的默认权限。 应用程序可能会正常运行,或者生成安全性异常,具体取决于应用程序所收到的权限。

很多 Windows 窗体应用程序都会用 ClickOnce 部署。 与前面讨论的安全默认设置相比,用于生成 ClickOnce 部署的工具具有不同的安全默认设置。 有关更多信息,请参见下面的讨论。

授予您的应用程序的实际权限可能与默认权限有所不同,原因是安全策略是可修改的;这意味着应用程序可能在一台计算机上具有某种权限,而在另一台计算机上不具有这种权限。

部署更安全的 Windows 窗体应用程序

安全性是应用程序开发的所有步骤中非常重要的一步。 请查看并按照代码安全维护指南中的说明进行操作。

下一步,确定应用程序是必须以完全信任权限运行,还是应以部分信任权限运行。 以完全信任权限运行应用程序将使访问本地计算机上的资源变得较为容易,但如果没有严格按照“安全编码指南”主题中的要求设计和开发应用程序,则会让应用程序及其用户暴露在高安全风险下。 以部分信任权限运行应用程序将使开发更安全的应用程序变得更加容易,并可以减少很多风险,但需要更多地计划如何实现某些功能。

如果选择部分信任(即“Internet”或“本地 Intranet”权限集),请确定您希望应用程序在此环境中的行为方式。 Windows 窗体提供了其他更安全的方式来在不完全受信任的环境中实现各种功能。 对于应用程序的某些部分,例如数据访问,可以针对部分信任和完全信任环境分别进行设计和编写代码。 某些 Windows 窗体功能,例如应用程序设置,就是针对在部分信任环境中运行而设计的。 有关更多信息,请参见应用程序设置概述

如果应用程序需要的权限超过了部分信任权限允许的权限,而您又不希望以完全信任权限运行,则可以以部分信任权限运行,同时仅断言所需的额外权限。 例如,如何您希望以部分信任权限运行,但必须授予应用程序对用户文件系统中的目录的只读访问权限,则可以仅请求该目录的 FileIOPermission。 如果使用正确,这种方法既可以增强应用程序的功能,又最大限度地降低了用户的安全风险。

当您开发将以部分信任权限运行的应用程序时,请跟踪应用程序必须运行的权限以及应用程序可以选择使用的权限。 在了解所有权限后,您应该发出一个应用程序级别的权限的声明性请求。 请求权限会向 .NET Framework 运行时发出通知,指出您的应用程序需要的权限,及其明确不需要的权限。 有关请求权限的更多信息,请参见请求权限权限请求

请求可选的权限时,必须处理可能的安全异常。如果未授予应用程序执行操作所需要的权限,则会生成安全异常。 适当地处理 SecurityException 将确保您的应用程序可以继续操作。 应用程序可以使用异常来确定是否对用户禁用某项功能。 例如,如果应用程序未授予所需的文件权限,它可能会禁用**“保存”**菜单选项。

有时,很难知道是否已断言所有适当的权限。 例如,表面上看似无害的方法调用可能会在其执行过程中的某一点访问文件系统。 在部署具有所有必需的权限的应用程序之前,当在桌面上对其进行调试时,测试结果可能一切正常,但一旦部署后就会失败。 .NET Framework 2.0 SDK 和 Visual Studio 2005 都包含有用于计算应用程序所需权限的工具,它们分别是 MT.exe 命令行工具和 Visual Studio 的“计算权限”功能。 有关更多信息,请参见 如何:确定 ClickOnce 应用程序的权限如何:确定 ClickOnce 应用程序的权限.

以下主题描述其他 Windows 窗体安全性功能。

主题

说明

描述如何在部分信任的环境中访问文件和数据。

描述如何在部分信任的环境中访问打印功能。

描述如何在部分信任的环境中执行窗口操作、使用剪贴板以及调用非托管代码。

部署具有适当权限的应用程序

向客户端计算机部署 Windows 窗体应用程序的最常用方式是使用 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 应用程序的自定义权限如何:设置 ClickOnce 应用程序的自定义权限如何:设置 ClickOnce 应用程序的自定义权限.

有关 ClickOnce 的安全性方面和权限提升的更多信息,请参见 保护 ClickOnce 应用程序。 有关受信任的应用程序部署的更多信息,请参见 受信任的应用程序部署概述

测试应用程序

如果已使用 Visual Studio 部署 Windows 窗体应用程序,则可以以部分信任权限或开发环境中的受限权限集启用调试。 有关更多信息,请参见 如何:使用受限权限对 ClickOnce 应用程序进行调试如何:使用受限权限对 ClickOnce 应用程序进行调试如何:使用受限权限对 ClickOnce 应用程序进行调试如何:使用受限权限对 ClickOnce 应用程序进行调试.

请参见

参考

Mage.exe(清单生成和编辑工具)

MageUI.exe(图形化客户端中的清单生成和编辑工具)

概念

代码访问安全性基础知识

ClickOnce 安全和部署

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

其他资源

Windows 窗体安全