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

Microsoft .NET Framework 和 Microsoft Office 提供的安全功能可帮助保护 Office 解决方案免受可能的安全威胁。 本主题介绍其中一些威胁,并提供帮助防范这些威胁的建议。 它还包含有关如何Microsoft Office 安全设置影响 Office 解决方案的信息。

适用于: 本主题中的信息适用于文档级项目和 VSTO 外接程序项目。 请参阅 Office 应用程序和项目类型提供的功能

受信任的代码在新的恶意文档中重新使用

攻击者可能采用用于特定目的的受信任代码,例如,为就业应用程序下载个人信息,并在另一个文档中重复使用该代码,例如工作表。 该代码不知道原始文档未运行,并且可能会在其他用户打开时打开其他威胁,例如显示个人信息或执行权限增加的代码。 攻击者还可以修改工作表中的数据,使其在发送给受害者时表现出非预期的行为。 通过更改链接到代码的工作表的值、公式或呈现特征,恶意用户可以通过发送修改的文件来攻击其他用户。 用户还可以通过修改工作表中的值来访问他们不应看到的信息。

由于程序集位置和文档位置必须有足够的证据来执行攻击,因此此类攻击的实施并不容易。 例如,电子邮件附件或不受信任的 Intranet 服务器上的文档没有足够的权限运行。

若要使此攻击成为可能,必须以某种方式编写代码本身,以便根据可能不可信的数据做出决策。 例如,创建包含包含数据库服务器名称的隐藏单元格的工作表。 用户将工作表提交到 ASPX 页面,该页尝试使用 SQL 身份验证和硬编码的 SA 密码连接到该服务器。 攻击者可以将隐藏单元格的内容替换为其他计算机名称并获取 SA 密码。 若要避免此问题,绝对不要对密码进行硬编码,并且在访问服务器之前,总是根据内部已知良好服务器的列表来检查服务器 ID。

Recommendations

  • 始终验证输入和数据,无论是来自用户、文档、数据库、Web 服务还是任何其他源。

  • 请小心公开特定类型的功能,例如代表用户获取特权数据并将其放入未受保护的工作表中。

  • 根据应用程序的类型,在执行任何代码之前,验证原始文档是否正在运行是有意义的。 例如,验证它是否从存储在已知安全位置的文档运行。

  • 如果应用程序执行任何特权作,则当文档打开时,最好显示警告。 例如,可以创建初始屏幕或启动对话框,指出应用程序将访问个人信息,并让用户选择继续或取消。 如果最终用户从看似无辜的文档中收到这样的警告,他或她将能够立即退出程序,以防出现任何损害。

Outlook 对象模型防护阻止代码

Microsoft Office 可以限制代码在对象模型中使用某些属性、方法和对象。 通过限制对这些对象的访问,Outlook 有助于防止电子邮件蠕虫和病毒出于恶意目的使用对象模型。 此安全功能称为 Outlook 对象模型防护。 如果在启用对象模型防护时 VSTO 外接程序尝试使用受限属性或方法,Outlook 将显示一个安全警告,该警告使用户能够停止作,或者允许用户在有限时间内授予对属性或方法的访问权限。 如果用户停止操作,则使用 Visual Studio 中的 Office 解决方案创建的 Outlook VSTO 外接程序将引发一个 COMException

对象模型防护可以通过不同的方式影响 VSTO 外接程序,具体取决于 Outlook 是否与 Microsoft Exchange Server 一起使用:

  • 如果 Outlook 未与 Exchange 一起使用,管理员可以为计算机上的所有 VSTO 外接程序启用或禁用对象模型防护。

  • 如果 Outlook 与 Exchange 一起使用,管理员可以为计算机上的所有 VSTO 外接程序启用或禁用对象模型防护,或者管理员可以指定某些 VSTO 外接程序可以在不遇到对象模型防护的情况下运行。 管理员还可以针对对象模型的某些区域修改对象模型防护的行为。 例如,即使启用了对象模型防护,管理员也可以自动允许 VSTO 外接程序以编程方式发送电子邮件。

    从 Outlook 2007 开始,对象模型防护的行为已更改,以改进开发人员和用户体验,同时帮助确保 Outlook 安全。 有关详细信息,请参阅 Outlook 2007 中的代码安全更改

最小化对象模型防护警告

为帮助避免使用受限属性和方法时出现安全警告,请确保 VSTO 外接程序从 Application 项目中的 ThisAddIn 类字段获取 Outlook 对象。 有关此字段的详细信息,请参阅 Program VSTO Add-ins

只有从此对象获取的 Outlook 对象才能由对象模型防护信任。 相比之下,从新 Microsoft.Office.Interop.Outlook.Application 对象获取的对象不受信任,如果启用了对象模型防护,受限属性和方法将引发安全警告。

如果启用了对象模型防护,则以下代码示例将显示安全警告。 To类的属性Microsoft.Office.Interop.Outlook.MailItem受对象模型防护的限制。 对象Microsoft.Office.Interop.Outlook.MailItem不受信任,因为代码从使用Microsoft.Office.Interop.Outlook.Application运算符创建的集合中获取它,而不是从Application字段中获取它。

private void UntrustedCode()
{
    Microsoft.Office.Interop.Outlook.Application application =
        new Microsoft.Office.Interop.Outlook.Application();
    Microsoft.Office.Interop.Outlook.MailItem mailItem1 =
        application.CreateItem(
        Microsoft.Office.Interop.Outlook.OlItemType.olMailItem) as
        Microsoft.Office.Interop.Outlook.MailItem;
    mailItem1.To = "someone@example.com";
    MessageBox.Show(mailItem1.To);
}

下面的代码示例演示如何使用对象模型防护所信任对象的受限 To 属性 Microsoft.Office.Interop.Outlook.MailItem 。 代码使用受信任的 Application 字段来获取 Microsoft.Office.Interop.Outlook.MailItem

private void TrustedCode()
{
    Microsoft.Office.Interop.Outlook.MailItem mailItem1 =
        this.Application.CreateItem(
        Microsoft.Office.Interop.Outlook.OlItemType.olMailItem) as
        Microsoft.Office.Interop.Outlook.MailItem;
    mailItem1.To = "someone@example.com";
    MessageBox.Show(mailItem1.To);
}

注释

如果 Outlook 与 Exchange 一起使用,则从 ThisAddIn.Application 中获取所有 Outlook 对象不能保证 VSTO 外接程序能够访问整个 Outlook 对象模型。 例如,如果 Exchange 管理员设置 Outlook 以自动拒绝使用 Outlook 对象模型访问地址信息的所有尝试,则即使代码示例使用受信任的 ThisAddIn.Application 字段,Outlook 也不会允许前面的代码示例访问 To 属性。

使用 Exchange 时指定要信任的加载项

当 Outlook 与 Exchange 一起使用时,管理员可以指定某些 VSTO 外接程序可以在不遇到对象模型防护的情况下运行。 在 Visual Studio 中使用 Office 解决方案创建的 Outlook VSTO 外接程序不能单独信任;它们只能作为组信任。

Outlook 基于 VSTO 外接程序入口点 DLL 的哈希代码信任 VSTO 外接程序。 面向 Visual Studio Tools for Office 运行时的所有 Outlook VSTO 外接程序都使用相同的入口点 DLL(VSTOLoader.dll)。 这意味着,如果管理员信任任何面向 Visual Studio Tools for Office 运行时运行的 VSTO 外接程序而不遇到对象模型防护,则面向 Visual Studio Tools for Office 运行时的所有其他 VSTO 外接程序也受信任。 有关在不遇到对象模型防护的情况下信任特定 VSTO 外接程序运行的详细信息,请参阅 指定 Outlook 用于管理病毒防护功能的方法

权限更改不会立即生效

如果管理员调整文档或程序集的权限,用户必须退出,然后重新启动所有 Office 应用程序,以便强制执行这些更改。

托管Microsoft Office 应用程序的其他应用程序还可以阻止强制执行新权限。 当安全策略发生更改时,用户应退出使用 Office、托管或独立的所有应用程序。

Microsoft Office 系统中的信任中心设置不会影响加载项或文档级自定义

用户可以通过在 信任中心设置选项来阻止 VSTO 外接程序加载。 但是,在 Visual Studio 中使用 Office 解决方案创建的 VSTO 外接程序和文档级自定义项不受这些信任设置的影响。

如果用户阻止 VSTO 外接程序使用 信任中心加载,则以下类型的 VSTO 外接程序将不会加载:

  • 托管和非托管的 COM VSTO 外接程序。

  • 管理的和非管理的智能文档。

  • 托管和非托管自动化 VSTO 外接程序。

  • 托管和非托管实时数据组件。

    以下过程介绍了用户如何使用 信任中心 限制 VSTO 外接程序在 Microsoft office 2013 和 Microsoft Office 2010 中加载。 这些过程不会影响使用 Visual Studio 中的 Office 开发工具创建的 VSTO 外接程序或自定义项。

在 Microsoft Office 2010 和 Microsoft Office 2013 应用程序中禁用 VSTO 外接程序

  1. 选择“ 文件 ”选项卡。

  2. 选择 “ApplicationName选项 ”按钮。

  3. 在类别窗格中,选择 “信任中心”。

  4. 在详细信息窗格中,选择 “信任中心设置”。

  5. 在“类别”窗格中,选择 “加载项”。

  6. 在详细信息窗格中,选择 “要求受信任的发布者签名应用程序加载项 ”或 “禁用所有应用程序加载项”。