🚀 在 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 属性指定了适用的确切扩展版本,如果您想为所有版本设置状态,则可以删除 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 的许多功能允许第三方工具和扩展自动运行,例如在保存时进行 linting 或格式化,或者在您执行某些操作(如编译代码或调试)时运行。不道德的人可能会精心制作一个看起来无害的项目,该项目会在您不知情的情况下运行恶意代码并损害您的本地计算机。“工作区信任”通过尝试在您评估不熟悉的源代码的安全性和完整性时阻止代码执行,从而提供额外的安全层。