在 VS Code 中尝试

工作区信任

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

设置

下面是可用的“工作区信任”设置

命令行开关

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

下一步

了解更多信息

常见问题

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

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

我的已安装扩展去哪儿了?

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

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

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

你可以,但不建议这样做。如果你不希望 VS Code 在打开新文件夹或仓库时检查“工作区信任”,可以将 security.workspace.trust.enabled 设置为 false。届时,VS Code 的行为将与 1.57 版本之前一样。

如何取消信任文件夹/工作区?

调出“工作区信任”编辑器(从命令面板中选择工作区:管理工作区信任),然后选择不信任按钮。你也可以从受信任的文件夹和工作区列表中移除该文件夹。

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

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

某些工作流程(例如连接到 GitHub Codespace附加到正在运行的 Docker 容器)会自动受信任,因为这些是托管环境,你应对其已有高度信任。

“工作区信任”可以防止什么?

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