运行 Office 解决方案的安全要求 (2003 System)

更新:2007 年 11 月

适用对象

本主题中的信息仅适用于指定的 Visual Studio Tools for Office 项目和 Microsoft Office 版本。

项目类型

  • 文档级项目

  • 应用程序级项目

Microsoft Office 版本

  • Microsoft Office 2003

有关更多信息,请参见按应用程序和项目类型提供的功能

文档级自定义项和应用程序级外接程序采用了 .NET Framework 中提供的安全功能。这使您的解决方案可以利用一系列的证据并基于这些证据来做出信任决策。

若要部署和运行 Microsoft Office 解决方案,必须向每个最终用户的安全策略中的程序集授予完全信任。对于自定义项的情况,如果文档位于网络位置而不在用户的计算机上,还必须向该文档授予完全信任。有关在最终用户计算机上设置安全策略的信息,请参见 部署安全策略

Microsoft Office 解决方案新增了一个自定义安全限制,即不接受“所有代码”或基于“区域”的证据类型,这意味着只有在安全策略中向程序集授予权限(授予信任)后,Microsoft Office 应用程序才会运行本地计算机、网络或 Internet 上的程序集。

Microsoft Office Outlook 包含对象模型保护,可以帮助防止不受信任的代码访问 Outlook 对象模型。该对象模型保护也可在运行您的代码时向最终用户显示警告。有关如何避免警告的信息,请参见 Office 解决方案的特定安全注意事项

信任等级

.NET Framework 安全中的信任等级包括以下三种:

  • 完全信任。此等级授予代码执行当前用户可执行的任何操作的权限。所有代码必须具有完全信任才能在 Office 解决方案中运行。

  • 部分信任。此等级是仅授予指定权限的受限权限集。部分信任代码将不在 Office 解决方案中运行。

  • 不信任。此等级不授予权限,所以代码不运行。

所需的权限集为“完全信任”;Office 解决方案不运行具有“部分信任”或“不信任”的托管代码扩展。有关权限集的更多信息,请参见 命名的权限集

证据类型

.NET Framework 安全中的证据类型包括以下几种:

有关更多信息,请参见 证据

在生成项目时,Visual Studio 使用 URL 证据向它们授予完全信任。当 Visual Studio 生成 Visual Studio Tools for Office 项目时,它将用户级安全策略修改为向 Office 项目的生成位置授予完全信任。当自定义项或外接程序运行时,加载程序向策略系统提供程序集位置的 URL,此操作向特定位置授予完全信任。

在自己的计算机上工作时此安全级别通常可满足要求,但如果在部署解决方案时使用此证据,则可能出现安全问题。在部署程序集之前,应赋予它更强形式的证据。使用更强形式的证据有两个理由:

  • 如果授予 Web 位置完全信任,拥有该位置写访问权限的恶意用户可以将程序集更换为他们的代码并欺骗他人运行。

  • 默认计算机级别策略授予所有网站部分信任,但由于需要完全信任,所以将用户级策略设置为向 URL 授予完全信任是不够的。

如果选择使用 URL 证据,应确保设置计算机策略级别的 Intranet 区域分支中的策略而不是用户策略级别。此外,仅向您所知的只有可信任的人才可以写入的位置授予完全信任。更好的策略是使用位置和加密型强证据的组合,例如强名称。强名称必须始终与位置信息一起使用,这样如果具有强名称的应用程序受到威胁,可以对其进行安全修补。

对于文档级自定义项,文档还具有基于位置的证据,这使得恶意用户更加难以通过创建将代码用于不可预料目的的文档的手段,来改变受信任代码的用途。如果具有托管代码扩展的文档未处在完全受信任的位置,它不会运行程序集。默认情况下,MyComputer 区域是完全受信任的,因此用户计算机上的文档可运行该代码,但 Internet 区域不是完全受信任的。

具有托管代码扩展的文档不使用依赖于 Office 证书存储区的“Office 宏安全性”。宏安全性与程序集安全性无关。

有关 .NET Framework 中安全性的信息,请参见 代码访问安全性基础知识,有关安全性的更为广泛的信息,请参见 .NET Framework 中的安全性安全策略管理概述

程序集安全性概述

程序集位置

默认设置

如何设置

开发计算机

生成 Office 项目时,会在您的计算机上向主程序集和“复制本地”设置为 true 的所有引用程序集授予完全信任。

不需要进行任何操作。

共享网络位置

程序集没有获得信任。

管理员设置信任该位置的网络安全策略后,程序集即受到保护(例如,使用数字签名)。有关信息,请参见 程序集安全注意事项

最终用户计算机

程序集没有获得信任。

管理员在用户的安全策略中向程序集授予信任。有关更多信息,请参见 部署安全策略

文档安全性概述

文档位置

默认设置

如何设置

开发计算机

文档获得完全信任。

不需要进行任何操作。

共享网络位置

文档没有获得信任。

管理员设置信任该位置的网络安全策略,还可以选择设置一个仅信任 Office 文档的自定义策略。有关信息,请参见如何:将权限授予共享位置中的文档和工作簿 (2003 System)

最终用户计算机

文档获得完全信任。

不需要进行任何操作。

开发计算机上的安全性

作为开发人员在 Visual Studio 中生成 Office 项目时,默认情况下会在用户级别将程序集的完整路径(包括程序集名称)添加到 .NET Framework 安全策略中。程序集因此可获得完全信任。项目的输出文件夹中的引用程序集在生成项目时也会接收到完全信任。

如果默认设置未更改,则 Visual Studio Tools for Office 会在每次生成解决方案时检查缓存中的安全策略;如果程序集不具备完全信任,则 Visual Studio Tools for Office 会授予完全信任。这样,即使重命名程序集或将项目移到一个新位置,项目也会始终受到信任。

如果更改了默认信任设置(将“信任程序集位置”属性设置为 false),Visual Studio 将不向程序集授予完全信任,并且代码不会运行。若要再次运行代码,请将“信任程序集位置”属性更改为 true,并重新生成解决方案。还可以设置一个全局规则,使从 Projects 文件夹和子文件夹运行的所有代码都拥有完全信任。

有关如何设置项目的信任选项以及向文件夹授予完全信任的信息,请参见如何:将权限授予文件夹和程序集 (2003 System)

安全策略缓存

公共语言运行时缓存每个进程的安全策略。当您生成项目时,Visual Studio 将检查此缓存以确认程序集是否拥有完全信任。如果程序集在 Visual Studio 启动时已经具有完全信任,则在生成过程中 Visual Studio 不会为程序集创建策略。

如果在 Visual Studio 运行时更改与项目相关的安全策略,则 Visual Studio 不会检测更改。如果所做的更改阻止项目运行,则应用程序会引发安全异常,因为 Visual Studio 不会重新创建策略来为程序集授予完全信任。若要使 Visual Studio 检测安全策略更改,您必须关闭 Visual Studio 后再将其重新打开。

用早期版本创建的解决方案

计算机上安装的每个版本的 Microsoft .NET Framework 都具有与之关联的安全策略。Visual Studio Tools for Office 解决方案检查为其创建这些解决方案的 .NET Framework 版本的安全策略。也就是说,如果解决方案是使用 Visual Studio Tools for Office 2003 版 创建的,它将始终检查 .NET Framework 1.1 版的安全策略。如果解决方案是使用 Visual Studio 2005 Tools for Office 创建的,它将始终检查 .NET Framework 2.0 版的安全策略。

Visual Studio Tools for the Office system 3.0 解决方案检查 .NET Framework version 3.5,但可以将 Office 2003 的解决方案设置为使用 .NET Framework 2.0。有关更多信息,请参见如何:更改目标 .NET Framework

在网络上创建的项目

尽管可以在共享网络位置创建项目,但不能通过网络运行该项目,除非在计算机级别为其授予完全信任。默认情况下,Visual Studio Tools for Office 在用户级别授予 URL 证据。必须以手动方式在计算机级别为程序集授予完全信任。

如果仅使用 URL 证据授予网络位置完全信任,拥有该位置写访问权限的恶意用户可以将程序集更换为他们的代码并欺骗他人运行。请考虑可替代 URL 证据,或可与其同时使用的其他形式的证据。有关更多信息,请参见本主题中的证据类型。

最终用户安全性

最终用户可以像通常打开任何文档那样打开具有托管代码扩展的文档。如果文档位于最终用户的计算机上,或者已在网络共享上为文档授予了信任,则 Word 或 Excel 会尝试加载和运行程序集。对于外接程序,当用户启动 Microsoft Office 应用程序时加载外接程序。

Microsoft Office 应用程序检查安全策略并执行以下操作之一:

  • 如果程序集和文档(如果适用)已被显式授予了权限,则允许运行程序集。有关如何在最终用户计算机上设置安全策略的信息,请参见部署安全策略

  • 如果用于确定权限的唯一证据是基于“所有代码”或“区域”的,则不执行代码,且用户收到错误信息,指出当前安全策略禁止代码运行。用户应该与管理员联系,以设置允许代码运行的策略。

默认的 Visual Studio Tools for Office 安全策略不允许运行自定义项中的代码。默认情况下,安全策略信任“我的电脑”区域,但是具有托管代码扩展的文档的应用程序域策略不允许“我的电脑”区域中的代码运行,直到该代码被显式授予信任。这与通常的开发者和最终用户体验不同,但可以加强使用默认设置的桌面的安全性。此外,最终用户无法在 Office 中更改安全选项以允许不受信任的代码运行。要允许托管代码扩展运行,必须显式修改 .NET 安全策略。

信任 Office 文档

大多数情况下,Office 文档从“我的电脑”区域运行,并且无需进行任何操作即可按预期方式打开文档。然而,程序集仍然必须是完全受信任的,应用程序才能运行。如果文档是以电子邮件附件的形式获得的,即使该文档指向受信任的程序集,也必须在解决方案运行之前将该文档保存在计算机中的其他位置(如用户的桌面)。这是因为附件位于“Internet”区域,该区域没有获得完全信任。

如果文档位于网络上,管理员还必须向文档授予权限。对于如模板这样的静态文档,管理员可以基于文档的完整路径 (URL) 信任文档。对于很多用户可以上载任意内容的更通用的存储(如 SharePoint 列表),管理员可以选择仅信任位于该共享位置的 Office 文档。有关更多信息,请参见 如何:将权限授予共享位置中的文档和工作簿 (2003 System)

从程序集中移除信任

如果管理员发现公司中存在安全问题,他(或她)可以通过应用对所有代码都不提供执行权限的策略,暂时禁用所有托管代码。如果需要某些托管代码,管理员可以进一步修改策略,仅允许所需代码运行,具体方法是选择该代码的特有属性(如位置、强名称或签名)并为其提供必要的权限。安全问题解决以后,只需将策略恢复为原来的形式即可轻松地重新启用托管代码。有关更多信息,请参见 如何:从文件夹和程序集中移除权限 (2003 System)

请参见

概念

安全部署 (2003 System)

Office 解决方案的安全性最佳做法 (2003 System)

Office 解决方案的特定安全注意事项

保证应用程序的安全

其他资源

Office 解决方案中的安全性 (2003 System)