Office 禁用来自 Internet 的文件中的所有 VBA 代码

原文: Office to Disable All VBA Code in Files from the Internet

Microsoft 宣布即将对其处理从 Internet 下载的 Office 应用程序(包括 Access 应用程序)中的代码的方式进行更改。

从将于 2022 年 4 月上旬发布的版本 2203 开始​​,如果文件是从互联网或其他不受信任的来源下载的,VBA 代码将自动禁用,无需手动覆盖选项。目前,用户可以选择在启动时启用这些宏。

当前处理方式

如果您尝试运行从 Internet 下载的 Access 文件,您当前会看到以下内容:

如您所见,只需单击[Enable Content]按钮即可绕过安全限制。

以后的处理方式

从 4 月份的新更新开始,上述警告将替换为以下消息。

请注意,没有覆盖按钮。 “了解更多”按钮将带您进入以下网页:潜在危险的宏已被阻止

网络标记

触发此警告的部分原因是下载文件的属性中存在所谓的“网络标记”(MOTW)。这是当您右键单击下载的文件并查看其“属性”对话框时看到的复选框:

要删除 MOTW,请选中上面对话框窗口中的“取消阻止”框,然后单击 [确定][应用]

Office 宏安全流程图

Microsoft 提供了一个方便的流程图,演示 Office 应用程序如何决定是阻止还是启用宏(即 VBA 代码)。

注意:
Windows 向来自不受信任位置(例如 Internet 或限制区域)的文件添加 Web 标记 (MOTW) 属性。该属性仅适用于保存在 NTFS 文件系统上的文件,不适用于保存在 FAT32 格式设备上的文件。

绕过新限制

有几种方法可以解决此问题:

去除网络标记

如上所述,此方法需要在打开下载的文件之前对其进行修改。有关“解锁”下载文件的详细说明,请参阅上面的“网络标记”部分。

用户第一次打开未阻止的文件时仍会看到黄色的“安全警告”横幅。如果他们单击 [Enable Content] 按钮,文件位置将保存为受信任文档,并且所有 VBA 代码将从该点开始工作。

从受信任的文件夹运行访问应用程序

这是首选方法,但它要求您有某种方法在用户设备上设置受信任的文件夹。

通过访问用户界面添加受信任位置

如果用户拥有完整版本的 Access,则可以通过文件 > 选项 > 信任中心 > [信任中心设置...] > 受信任位置 > [添加新位置...] 来执行此操作。通过 Access 用户界面添加的可信位置存储在 Windows 注册表的用户配置文件部分(即 HKCU 配置单元)

这些位置显示为以下注册表项下的子项(“16.0”是 Office 2016+ 的版本号,早期版本将有不同的编号)

1
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Office\16.0\Access\Security\Trusted Locations

通过安装程序添加受信任位置

如果您使用某种安装程序(例如 Inno Setup)分发应用程序,则可以将受信任位置设置为安装过程的一部分。

然而,HKCU 配置单元的问题在于它与当前用户的配置文件相关联。如果您的应用程序是通过与最终用户帐户分开的管理员帐户安装的,那么当最终用户启动您的应用程序时,对 HKCU 注册表配置单元所做的任何条目都将毫无意义。这是因为受信任位置将与管理员的用户配置文件关联,而不是与最终用户的配置文件关联。

幸运的是,您可以在 HKLM 配置单元中设置一个计算机范围的可信位置注册表项。这允许您作为开发人员将其构建到您的安装程序中,作为应用程序设置过程的一部分。

我将在另一篇文章中编写更详细的说明,但现在只需知道您需要将受信任位置创建为以下注册表项的子项:

1
HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Office\16.0\Access\Security\Trusted Locations

请注意,您需要将“16.0”替换为您的 Access 版本,并且可能根本不需要“WOW6432Node”密钥。这是一个示例:

唯一必需的值是 “Path”。

对您的 VBA 项目进行数字签名

为了完整性,我包含此选项,但我不推荐它。

正如您从上面的流程图中看到的,避免宏警告的一种方法是使用受信任的发布者的证书对您的应用程序进行数字签名。这种方法涉及许多步骤。

  1. 购买代码签名证书(几百美元)或创建自签名证书

  2. 签署VBA项目

  3. 验证证书发布者是否在最终用户的计算机上注册为“受信任的发布者”(我相信即使使用商业代码签名证书,这也是必要的)

有很多陷阱。在上述任何一个阶段都很容易搬起石头砸自己的脚。如果您走这条路,请做好经常遭受挫折的准备。

不管怎样,我多年来一直为商业代码签名证书付费。但是,我只用它来签署我的安装包,而不是我的 VBA 代码项目。

附加参考

  1. Macros from the internet will be blocked by default in Office https://learn.microsoft.com/en-us/DeployOffice/security/internet-macros-blocked

  2. Details about the Mark-of-the-Web (MOTW) https://nolongerset.com/mark-of-the-web-details/


Office 禁用来自 Internet 的文件中的所有 VBA 代码
https://xxxxnnxxxx.github.io/2023/09/19/Office 禁用来自 Internet 的文件中的所有 VBA 代码/
作者
xxxxnnxxxx
发布于
2023年9月19日
许可协议