启用安全性
如上所述,安全性是 Express 版本的关键设计目标。它既能在默认情况下实现 Visual Studio 产品套件本身的安全性,而且还提供一个安全开发环境,并允许开发人员在默认情况下轻松生成安全的应用程序。构思了这些目标之后,需要有大量的关键功能帮助实现这一目标:
| • |
内置 Web 服务器:对于生成 Web 应用程序的开发人员而言,一个最大的约束是需要在开发计算机上安装 Internet 信息服务。站在管理立场看,这经常会引发激烈的争辩,因为 IT 员工现在必须确保每台开发人员计算机上运行的 Web 服务器不受 Web 服务器的攻击,并且不能从本地网络之外进行访问。此外,通常还需要开发人员具备 Web 服务器的管理权限,使他们能够在开发、配置设置和调试其应用程序的过程中更有效地工作。 要处理这些以及其他一些问题,Visual Web Developer 2005 Express 版本配备了一个内置的 Web 服务器,该服务器在开发环境内部运行。最初,该配置相对于之前的环境而言似乎有一些麻烦且安全性较低。但是,通过最小化攻击面并因此降低了危险,大量安全功能为安全部署做好了准备。这些功能如下所示。
| ||||||||||||
| • |
IntelliSense-in-zone 和 Debug-in-zone:IntelliSense -in-zone(区域内智能感知)功能可以与代码访问安全性策略一起使用,以帮助开发人员正确选择在其应用程序中使用的 API。在 Visual Basic 中运行时,智能感知功能提供可视化的反馈,从而让开发人员了解在当前执行区域内不可用的任何 API,以及引起应用程序违反安全策略的 API。例如,如果从本地企业内部网内执行,应用程序只能读取默认的“用户名”环境变量。因此,IntelliSense-in-zone 功能将可视化地标记违反该策略的任何尝试,例如试图访问其他环境变量。 Debug-in-zone(区域内调试)功能也有点类似,它帮助实现同一个目标。在这种情况下,开发人员进行代码调试就像是在一个特定区域内,或利用定义的代码访问安全性策略执行代码。因此,开发人员能够及早地检测到违规并了解每个区域提供的执行沙盒。 通过在开发过程中为开发人员提供这些工具,开发人员能够预先进行正确的选择并避免代价高昂的重新编码和部署,前提是这些问题仅出现在产品阶段。这样还能让开发人员轻松地编写在指定沙盒中执行的代码,然后管理员能利用它控制与应用程序(由使用 Express 版本的非专业开发人员创建)相关的访问权限。 | ||||||||||||
| • |
ClickOnce:ClickOnce 是一种新的应用程序部署技术,它试图使部署一个基于 Windows 窗体的应用程序像部署一个 ASP.NET Web 应用程序那样简单。站在最终用户角度看,通过 ClickOnce 运行一个 Windows 窗体应用程序就像在 Web 页面上单击一个链接一样简单。对于管理员也如此,部署或更新这样一个应用程序就像更新服务器上的适当文件一样简单,无需修改每个单独的客户端。因此, ClickOnce 应用程序基本上是低影响、完全独立且每用户安装的。重要的是,开发人员不需要以管理员身份对本地系统进行访问。同样,不存在 ClickOnce 应用程序中断其他应用程序的危险,因为它们独立于客户系统上的其他应用程序运行。但应该注意,如果安装时应用程序不需要执行复杂或特权操作(如,安装设备驱动程序),则组织会很好地利用 MSI。虽然其后续过程更棘手、更复杂,但管理员还希望 ClickOnce 解决更复杂的情况。 ClickOnce 应用程序可通过 Web 服务器、文件服务器或 CD 进行部署。这样的应用程序可选择在本地计算机上安装,即在“开始”菜单和“添加或删除程序”中创建项;或应用程序只能从其当前位置和缓存中运行。 ClickOnce 应用程序还提供一些自打检查应用程序更新的手段。应用程序还以选择使用 System.Deployment 命名空间下的 ClickOnce API,从而可以更细粒度地控制更新发生的时间和方式。 Express 产品具有对 ClickOnce 部署技术丰富的本机支持。开发人员可以选择从 Visual Studio 本身发布应用程序,同时开发环境将自动创建启动 ClickOnce 过程必需的 XML 清单文件。很明显,管理员希望能够灵敏地控制谁可以向哪些服务器进行发布,本文会提供一些特殊的建议(例如使用授权),请查看本文的其他建议一节。 ClickOnce 应用程序在由代码访问安全性策略提供的安全沙盒中运行。即,上面描述的 IntelliSense-in-zone 和 Debug-in-zone 工具可在开发过程中为希望创建 ClickOnce 应用程序的开发人员提供巨大的帮助。使用诸如 PermCalc.exe 这样的工具还可以帮助开发人员准确识别应用程序成功执行所需的权限,帮助他们比较授予区域(应用程序将从这里执行)的权限。对于需要较高权限集合来执行的应用程序而言,ClickOnce 模型既支持用户进行决策,也支持以管理员身份定义的、基于预部署安全策略的方法。 | ||||||||||||
| • |
部分信任开发:部分信任的应用程序以简化的权限运行,从而使它们无需写入文件系统的任意组件;无需与 Internet 主机(除源主机之外)连接;无需执行授权的操作(例如,调用非托管代码)。这些限制旨在保护底层主机的安全免遭因被怀疑的应用程序中漏洞的波及,保护其他运行于同一台服务器上的应用程序。这在共享主机方案(有外包提供程序),以及组织在同一计算机上运行多个 Web 应用程序时都相当普遍。 在 .NET Framework 和 Visual Studio 的早期版本中,创建部分信任的应用程序并不轻松。开发人员工具不可用,也许甚至更重要的是,部分信任沙盒受到严格的限制,以至于创建任何有意义的、以部分信任方式成功运行的应用程序几乎是不可能完成的任务。该版本的一个主要的目标是安全性,因此,用 .NET Framework 2.0 版本和 Visual Studio 2005 编写代码是相当简单且真正合理的。尽管一些更改对您有所帮助(例如,上述的 PermCalc.exe、Debug-in-zone 和 IntelliSense-in-zone),但下面的内容讨论了一些关键的更改,这些更改使创建真实的部分信任应用程序这一目标至少实现了一部分:
|
重点要说明的是,上面列出的功能仅代表 Express 版本和 .NET Framework 中可用功能的一小部分,它们可用于启动安全性,并防止非专业的开发人员创建可能导致将组织的重要数据暴露给恶意用户的应用程序。本文的其他内容关注管理员能够防止漏洞的其他手段,同时还使开发新手了解这些内容并更有效地工作。
