现已发布!阅读 10 月份的新功能和修复。

工作区信任

Visual Studio Code 重视安全性,希望帮助您安全地浏览和编辑代码,无论其来源或原始作者如何。工作区信任功能使您可以决定项目文件夹中的代码是否可以在没有您的明确批准的情况下由 VS Code 和扩展执行。

Trust this folder dialog

注意:如果有疑问,请将文件夹保留在 受限模式 中。您始终可以稍后 启用信任

安全代码浏览

公共存储库和文件共享中提供了大量源代码,这是一件好事。无论编码任务或问题是什么,可能已经存在一个很好的解决方案。同样重要的是,有如此多的强大编码工具可帮助您理解、调试和优化代码。但是,使用开源代码和工具确实存在风险,您可能会让自己容易受到恶意代码执行和利用的攻击。

工作区信任在使用不熟悉的代码时提供额外的安全层,如果工作区在“受限模式”下打开,则会阻止自动执行工作区中任何代码的代码执行。

注意:术语“工作区”和“文件夹”在 VS Code UI 和文档中广泛使用。您可以将 “工作区” 视为 VS Code 创建和使用的包含额外元数据的文件夹。

受限模式

当工作区信任对话框提示您时,如果您选择不,我不信任作者,VS Code 将进入受限模式以阻止代码执行。

工作台将在顶部显示一个横幅,其中包含一个指向管理您的文件夹(通过工作区信任编辑器)的链接。在状态栏中,您还可以看到一个指示工作区处于受限模式的徽章。

Workspace Trust Restricted Mode banner

受限模式尝试通过禁用或限制某些 VS Code 功能的操作来阻止自动代码执行:任务、调试、工作区设置和扩展。

要查看在受限模式下禁用的所有功能列表,您可以通过横幅中的管理链接打开工作区信任编辑器,或通过选择状态栏中的受限模式徽章。

Workspace Trust editor

重要:工作区信任无法阻止恶意扩展执行代码并忽略受限模式。您只应安装和运行来自您信任的知名发布者的扩展。

任务

VS Code 任务 可以运行脚本和工具二进制文件。由于任务定义是在工作区 .vscode 文件夹中定义的,因此它们是仓库已提交源代码的一部分,并与该仓库的每个用户共享。如果有人创建恶意任务,则任何克隆该仓库的人可能会在不知情的情况下运行它。

如果您尝试运行或枚举任务(任务 > 运行任务),而在受限模式下,VS Code 将显示一个提示,确认您信任该文件夹并可以继续执行该任务。如果您取消对话框,VS Code 将保持受限模式。

Workspace Trust Restricted Mode tasks dialog

调试

与运行 VS Code 任务类似,调试扩展在启动调试会话时可以运行调试器二进制文件。因此,当文件夹在受限模式下打开时,调试 也被禁用。

如果您尝试启动调试会话(调试 > 开始调试),而在受限模式下,VS Code 将显示一个提示,确认您信任该文件夹并可以继续启动调试器。如果您取消对话框,VS Code 将保持受限模式,并且不会启动调试会话。

Workspace Trust Restricted Mode debugging dialog

工作区设置

工作区 设置 存储在工作区根目录的 .vscode 文件夹中,因此由克隆工作区仓库的任何人共享。某些设置包含可执行文件路径(例如,linter 二进制文件),如果设置为指向恶意代码,可能会造成损坏。因此,VS Code 在受限模式下运行时会禁用一组工作区设置。

Workspace Trust editor workspace settings link

在工作区信任编辑器中,选择未应用于工作区设置的链接,以调出按 @tag:requireTrustedWorkspace 标记范围限定的设置编辑器。

Settings editor scoped by the requireTrustedWorkspace tag in a restricted workspace

扩展

VS Code 扩展 生态系统非常丰富多样。人们创建了扩展来帮助完成几乎任何编程任务或编辑器自定义。某些扩展提供完整的编程语言支持(IntelliSense、调试、代码分析),而其他扩展则可以让您播放音乐或拥有虚拟 宠物

大多数扩展代表您运行代码,并且可能造成潜在的危害。一些扩展具有可能导致它们恶意行为的设置,如果配置为运行意外的可执行文件。因此,默认情况下,在受限模式下会禁用尚未明确选择加入工作区信任的扩展。

Workspace Trust disabled extensions link

您可以通过选择工作区信任编辑器中的扩展被禁用或功能有限链接来查看已安装扩展的状态,该链接将显示使用 @workspaceUnsupported 过滤器范围限定的扩展视图。

Extensions view filtered by workspaceUnsupported showing disabled and limited extensions

尚未选择加入工作区信任的扩展在受限模式下可能被禁用或功能有限。

在受限模式下禁用

尚未明确表明支持在受限模式下运行的扩展将显示在在受限模式下禁用部分中。如果扩展作者确定其扩展可能会被工作区中的修改(设置或文件)滥用,他们还可以表明他们永远不想在受限模式下启用。

在受限模式下功能有限

扩展作者还可以评估其扩展是否存在潜在的安全漏洞,并在受限模式下运行时声明其支持**有限**。此模式意味着扩展可能会禁用某些功能或功能以防止可能的漏洞。

扩展可以向扩展视图中的工作区信任徽章添加自定义文本,解释在不受信任的文件夹中运行时的限制。例如,VS Code 内置的 PHP 扩展将php.validate.executablePath设置的使用限制为受信任的文件夹,因为覆盖此设置可能会运行恶意程序。

PHP extension limited in Restricted Mode hover

您可以使用extensions.supportUntrustedWorkspaces设置覆盖扩展的工作区信任支持级别,该设置在下面的启用扩展部分中进行了描述。

如果您尝试在受限模式下安装扩展,系统会提示您信任工作区或仅安装扩展。如果扩展不支持工作区信任,则会安装该扩展,但会被禁用或以有限的功能运行。

Workspace Trust install an extension in Restricted Mode dialog

注意:扩展作者可以通过阅读工作区信任扩展指南了解如何更新其扩展以支持工作区信任。

信任工作区

如果您信任项目作者和维护者,则可以信任项目在本地计算机上的文件夹。例如,通常可以安全地信任来自知名 GitHub 组织(如 github.com/microsoft 或 github.com/docker)的存储库。

当您打开一个新文件夹时,初始工作区信任提示允许您信任该文件夹及其子文件夹。

Trust this folder dialog

您还可以打开工作区编辑器并通过选择**信任**或**信任父文件夹**按钮快速切换文件夹的信任状态。

Workspace Trust editor Trust buttons

有多种方法可以打开工作区信任编辑器对话框。

在受限模式下

  • 受限模式横幅**管理**链接
  • 受限模式状态栏项目

您也可以随时使用

  • 工作区:管理工作区信任命令从命令面板(⇧⌘P(Windows、Linux Ctrl+Shift+P

选择文件夹

当您信任一个文件夹时,它会被添加到工作区信任编辑器中显示的**受信任的文件夹和工作区**列表中。

Workspace Trust editor Trusted Folders and Workspaces list

您可以手动添加、编辑和从该列表中删除文件夹以启用或禁用工作区信任。活动文件夹在此列表中以粗体突出显示。

选择父文件夹

当您通过工作区信任编辑器信任一个文件夹时,您还可以选择信任父文件夹。这会将信任应用于父文件夹及其所有子文件夹。

Workspace Trust editor showing the Trust Parent button

如果您在同一个文件夹下有许多包含受信任内容的文件夹,那么信任父文件夹会很有帮助。

当您打开受信任父文件夹下的子文件夹时,您将不会看到通常的**不信任**按钮来让您回到受限模式。相反,会有文字提到您的文件夹因为另一个文件夹而被信任。

您可以从**受信任的文件夹和工作区**列表中添加、修改和删除父文件夹条目。

文件夹配置

当您信任一个父文件夹时,所有子文件夹都会被信任,这使您可以通过磁盘上的存储库位置来控制工作区信任。

例如,您可以将所有受信任的存储库放在“TrustedRepos”父文件夹下,并将不熟悉的存储库放在另一个父文件夹下,例如“ForEvaluation”。您将信任“TrustedRepos”文件夹,并选择性地信任“ForEvaluation”下的文件夹。

├── TrustedRepos - Clone trusted repositories under this parent folder
└── ForEvaluation - Clone experimental or unfamiliar repositories under this parent folder

您还可以通过将存储库分组在特定于组织的父文件夹下,对存储库进行分组并设置信任。

├── github/microsoft - Clone a specific organization's repositories under this parent folder
├── github/{myforks} - Place your forked repositories under this parent folder
└── local - Local un-published repositories

启用扩展

如果您想使用受限模式但您喜欢的扩展不支持工作区信任,该怎么办?如果扩展虽然有用且功能齐全,但没有得到积极维护并且没有声明其工作区信任支持,则可能会发生这种情况。为了处理这种情况,您可以使用extensions.supportUntrustedWorkspaces设置覆盖扩展的信任状态。

重要:小心覆盖扩展的工作区信任支持。扩展作者可能出于充分的理由在受限模式下禁用其扩展。如有疑问,请联系扩展作者或查看最近的更改日志以了解更多信息。

在设置编辑器(⌘,(Windows、Linux Ctrl+,)中,您可以通过扩展:支持不受信任的工作区设置(extensions.supportUntrustedWorkspaces)覆盖单个扩展的工作区信任。

Extension support

选择**在 settings.json 中编辑**链接以管理扩展 ID 列表及其支持状态和版本。您可以通过 IntelliSense 建议选择任何已安装的扩展。

下面您可以看到 Prettier 扩展的settings.json条目。

  "extensions.supportUntrustedWorkspaces": {
    "esbenp.prettier-vscode": {
      "supported": true,
      "version": "6.4.0"
    },
  },

您可以使用supported属性启用或禁用工作区信任支持。version属性指定适用的确切扩展版本,您可以删除版本字段,如果您想为所有版本设置状态。

如果您想了解有关扩展作者如何在受限模式下评估和确定哪些功能需要限制的更多信息,您可以阅读工作区信任扩展指南.

打开不受信任的文件

如果您打开位于受信任文件夹外部的文件,VS Code 会检测到该文件来自文件夹根目录外部,并提示您选择继续打开文件或在受限模式下在新窗口中打开文件。在受限模式下打开是最安全的选项,您始终可以重新打开文件到原始的 VS Code 窗口,一旦确定该文件是值得信赖的。

Untrusted files dialog

如果您希望在从受信任工作区外部打开文件时不出现提示,您可以将security.workspace.trust.untrustedFiles设置为open。您还可以将security.workspace.trust.untrustedFiles设置为newWindow,始终在受限模式下创建一个新窗口。在不受信任的文件对话框中选中**记住我针对所有工作区做出的决定**选项会将您的选择应用于security.workspace.trust.untrustedFiles用户设置。

打开不受信任的文件夹

当处理具有多个文件夹的多根工作区时,如果您尝试将一个新文件夹添加到受信任的多根工作区,系统会提示您决定是否信任该文件夹中的文件,否则整个工作区将切换到受限模式。

Untrusted folder dialog

空窗口(没有打开的文件夹)

默认情况下,如果您打开一个没有打开文件夹或工作区的新 VS Code 窗口(实例),VS Code 将以完全信任的方式运行该窗口。所有已安装的扩展都已启用,您可以不受限制地使用空窗口。

当您打开一个文件时,系统会提示您是否要打开一个不受信任的文件,因为没有文件夹来将其作为父级。

您可以通过使用工作区信任编辑器(在命令面板中选择工作区:管理工作区信任),然后选择不信任来将空窗口切换到受限模式。空窗口将在当前会话中保持受限模式,但如果您重新启动或创建一个新窗口,它将恢复为受信任状态。

如果您希望所有空窗口都处于受限模式,您可以将security.workspace.trust.emptyWindow设置为false

设置

以下是可用的工作区信任设置

  • security.workspace.trust.enabled - 启用工作区信任功能。默认值为 true。
  • security.workspace.trust.startupPrompt - 是否在启动时显示工作区信任对话框。默认情况下,只针对每个不同的文件夹或工作区显示一次。
  • security.workspace.trust.emptyWindow - 是否始终信任空窗口(没有打开的文件夹)。默认值为 true。
  • security.workspace.trust.untrustedFiles - 控制如何处理工作区中的松散文件。默认值为提示。
  • extensions.supportUntrustedWorkspaces - 覆盖扩展工作区信任声明。true 或 false。
  • security.workspace.trust.banner - 控制何时显示受限模式横幅。默认值为untilDismissed

命令行开关

您可以通过传递--disable-workspace-trust来通过 VS Code 命令行禁用工作区信任。此开关只影响当前会话。

后续步骤

了解更多

常见问题

在受限模式下,我仍然可以编辑我的源代码吗?

是的,您仍然可以在受限模式下浏览和编辑源代码。一些语言功能可能被禁用,但文本编辑始终受支持。

我安装的扩展去哪里了?

在受限模式下,任何不支持工作区信任的扩展将被禁用,所有 UI 元素(如活动栏图标和命令)将不会显示。

您可以使用 extensions.supportUntrustedWorkspaces 设置覆盖扩展的工作区信任支持级别,但请谨慎操作。 启用扩展 有更多详细信息。

我可以禁用工作区信任功能吗?

您可以禁用,但不建议这样做。如果您不希望 VS Code 在打开新文件夹或存储库时检查工作区信任,您可以将 security.workspace.trust.enabled 设置为 false。VS Code 将像 1.57 版本发布之前那样运行。

如何撤销对文件夹/工作区的信任?

打开工作区信任编辑器(从命令面板中选择 **工作区:管理工作区信任**)并选择 **不信任** 按钮。您也可以从 **受信任的文件夹和工作区** 列表中删除该文件夹。

为什么我没有看到“不信任”按钮?

如果您在工作区信任对话框中没有看到 **不信任** 按钮,则该文件夹的信任级别可能从父文件夹继承。查看 **受信任的文件夹和工作区** 列表以检查父文件夹是否启用了工作区信任。

一些工作流,例如连接到 GitHub Codespace连接到运行中的 Docker 容器,会自动获得信任,因为这些是您应该已经高度信任的托管环境。

工作区信任保护什么?

VS Code 的许多功能允许第三方工具和扩展自动运行,例如保存时的代码整理或格式化,或者在您执行某些操作(例如编译代码或调试)时。不道德的人可能会精心制作一个看起来无害的项目,该项目会在您不知情的情况下运行恶意代码并损害您的本地机器。工作区信任通过尝试在您评估未知源代码的安全性和完整性时阻止代码执行来提供额外的安全层。