工作区信任
Visual Studio Code 非常重视安全性,并希望帮助您安全地浏览和编辑代码,无论其来源或原始作者是谁。工作区信任 (Workspace Trust) 功能允许您决定项目文件夹中的代码是否可以在未经您明确批准的情况下由 VS Code 和扩展程序执行。

安全代码浏览
公共存储库和文件共享中提供了如此多的源代码,这非常棒。无论是什么编码任务或问题,可能在某个地方都已经有了很好的解决方案。同样棒的是,有许多强大的编码工具可以帮助您理解、调试和优化代码。然而,使用开源代码和工具确实存在风险,您可能会让自己暴露于恶意代码执行和漏洞利用之下。
工作区信任在处理陌生代码时提供了一层额外的安全保护,通过在工作区以“受限模式”打开时阻止其中任何代码的自动执行来实现这一点。
工作区信任在您的 VS Code 窗口和 代理窗口 (Agents window) 之间共享。如果工作区在 VS Code 中不受信任,那么它在代理窗口中也是不受信任的,代理也不会在这两个地方运行。您可以从任一界面管理工作区信任,信任状态在两者之间共享。
受限模式
当工作区信任对话框提示时,如果您选择 否,我不信任作者,VS Code 将进入受限模式以防止代码执行。
工作台会在顶部显示一个横幅,其中包含通过工作区信任编辑器 管理 (Manage) 您文件夹的链接。在状态栏中,您还可以看到一个徽章,指示工作区处于受限模式。

受限模式试图通过禁用或限制多个 VS Code 功能的操作来防止自动代码执行:AI 代理、终端、任务、调试、工作区设置和扩展程序。
要查看在受限模式下禁用的完整功能列表,您可以通过横幅中的 管理 链接打开工作区信任编辑器,或者通过选择状态栏中的受限模式徽章打开。默认情况下,工作区信任编辑器会在编辑器区域上方以 模态弹窗 的形式打开。

工作区信任无法阻止恶意扩展程序执行代码并忽略 受限模式。您只应安装和运行来自您信任的知名发布者的扩展程序。
AI 代理
当您在 VS Code 中使用 AI 驱动的开发功能(如代理)时,这些代理会代表您执行操作,包括更改您的代码库、运行终端命令或调用 Web 请求。任何文件都可能通过使用代理被拉入上下文,理论上可能导致提示注入攻击 (prompt injection attack)。
在您审查项目是否存在恶意内容之前,请依赖工作区信任边界并以受限模式打开它。以受限模式打开工作区会禁用该工作区中的代理。
了解更多关于在 VS Code 中使用 AI 驱动的开发功能时的 AI 安全注意事项。
终端
Shell 可以根据工作区内容自动执行代码,例如通过源化 (sourcing) .env 文件或运行引用当前目录的 shell 初始化脚本。为了防止这种情况,默认情况下,当文件夹以受限模式打开时,打开 终端 是被阻止的。
如果您在受限模式下尝试打开终端,VS Code 会显示一个提示,要求确认您信任该文件夹。如果您取消对话框,VS Code 将保持在受限模式,并且不会打开终端。
如果您配置了 shell 以防止基于工作区内容的自动代码执行,您可以启用 terminal.integrated.allowInUntrustedWorkspace 设置,以允许终端在受限模式下打开而无需信任提示。
任务
VS Code 任务 (Tasks) 可以运行脚本和工具二进制文件。由于任务定义是在工作区的 .vscode 文件夹中定义的,它们是存储库提交的源代码的一部分,并共享给该存储库的每个用户。如果有人创建了恶意任务,任何克隆该存储库的人都可能在不知情的情况下运行它。
如果您在受限模式下尝试运行甚至枚举任务(任务 > 运行任务),VS Code 会显示一个提示,确认您信任该文件夹并可以继续执行任务。如果您取消对话框,VS Code 将保持在受限模式。

调试
与运行 VS Code 任务类似,调试扩展程序在启动调试会话时可能会运行调试器二进制文件。因此,当文件夹以受限模式打开时,调试 也被禁用。
如果您在受限模式下尝试启动调试会话(调试 > 开始调试),VS Code 会显示一个提示,确认您信任该文件夹并可以继续启动调试器。如果您取消对话框,VS Code 将保持在受限模式,并且不会启动调试会话。

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

在工作区信任编辑器中,选择未被应用的那些工作区设置的链接,以调出通过 @tag:requireTrustedWorkspace 标签限定范围的设置编辑器。

扩展
VS Code 扩展程序 生态系统非常丰富多样。人们创建了扩展程序来帮助完成几乎任何编程任务或编辑器自定义。一些扩展程序提供完整的编程语言支持(IntelliSense、调试、代码分析),而另一些则让您可以听音乐或拥有虚拟 宠物。
大多数扩展程序代表您运行代码,并可能造成潜在危害。某些扩展程序的设置如果被配置为运行意外的可执行文件,可能会导致它们采取恶意行为。因此,未明确选择加入工作区信任的扩展程序在受限模式下默认被禁用。

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

未选择加入工作区信任的扩展程序在受限模式下可能被禁用或受到限制。
在受限模式下禁用
未明确表示支持在受限模式下运行的扩展程序将显示在 在受限模式下禁用 部分。如果扩展作者确定他们的扩展可能被工作区中的修改(设置或文件)滥用,他们也可以指定不希望在受限模式下被启用。
在受限模式下受到限制
扩展作者还可以评估其扩展程序是否存在潜在的安全漏洞,并声明它们在受限模式下运行时具有 受限 支持。此模式意味着扩展程序可能会禁用某些功能或特性,以防止可能的攻击。
扩展程序可以将自定义文本添加到扩展程序视图中的工作区信任徽章,解释在不受信任的文件夹中运行时受到的限制。例如,VS Code 内置的 PHP 扩展将 php.validate.executablePath 设置的使用限制为仅限受信任的文件夹,因为覆盖此设置可能会运行恶意程序。

您可以使用 extensions.supportUntrustedWorkspaces 设置来覆盖扩展程序的工作区信任支持级别,该设置在下面的 启用扩展程序 部分进行了描述。
如果您尝试在受限模式下安装扩展程序,系统会提示您选择信任该工作区或仅安装该扩展程序。如果扩展程序不支持工作区信任,它将被安装,但会被禁用或以受限功能运行。

扩展作者可以通过阅读 工作区信任扩展指南 来了解如何更新他们的扩展以支持工作区信任。
信任工作区
如果您信任项目的作者和维护者,您可以信任本地计算机上的项目文件夹。例如,信任来自知名 GitHub 组织(如 github.com/microsoft 或 github.com/docker)的存储库通常是安全的。
当您打开一个新文件夹时,初始的工作区信任提示允许您信任该文件夹及其子文件夹。

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

有几种方法可以调出工作区信任编辑器对话框。
处于受限模式时
- 受限模式横幅中的 管理 链接
- 受限模式状态栏项
您也可以随时使用
- 命令面板中的 Workspaces: Manage Workspace Trust(工作区:管理工作区信任)命令 (⇧⌘P(Windows、Linux Ctrl+Shift+P))
工作区信任在您的 VS Code 窗口和 代理窗口 (Agents window) 之间共享。如果工作区在 VS Code 中不受信任,那么它在代理窗口中也是不受信任的,代理也不会在这两个地方运行。您可以从任一界面管理工作区信任,信任状态在两者之间共享。
选择文件夹
当您信任一个文件夹时,它会被添加到显示在工作区信任编辑器中的 受信任的文件夹和工作区 列表中。

您可以从此列表中手动添加、编辑和删除文件夹,以启用或禁用工作区信任。活动文件夹在此列表中以粗体突出显示。
选择父文件夹
当您通过工作区信任编辑器信任一个文件夹时,您可以选择同时信任其父文件夹。这会将信任应用于父文件夹及其所有子文件夹。

如果您有许多包含受信任内容的文件夹位于同一个文件夹下,信任父文件夹会很有帮助。
当您打开受信任父文件夹下的子文件夹时,您将不会看到通常用于让您回到受限模式的 不信任 按钮。取而代之的是,会有一段文字提到由于另一个文件夹,您的文件夹是受信任的。
您可以从 受信任的文件夹和工作区 列表中添加、修改和删除父文件夹条目。
文件夹配置
当您信任父文件夹时,所有子文件夹都会被信任,这使您可以通过磁盘上的存储库位置来控制工作区信任。
例如,您可以将所有受信任的存储库放在“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 )为单个扩展程序覆盖工作区信任。

选择 在 settings.json 中编辑 链接以管理扩展 ID 列表及其支持状态和版本。您可以通过 IntelliSense 建议选择任何已安装的扩展程序。
在下面,您可以查看 Prettier 扩展程序的 settings.json 条目。
"extensions.supportUntrustedWorkspaces": {
"esbenp.prettier-vscode": {
"supported": true,
"version": "6.4.0"
},
},
您可以使用 supported 属性启用或禁用工作区信任支持。version 属性指定适用的确切扩展版本,如果您想为所有版本设置状态,则可以删除版本字段。
如果您想了解更多关于扩展作者如何评估和确定在受限模式下限制哪些功能的信息,可以阅读 工作区信任扩展指南。
打开不受信任的文件
如果您打开的文件位于受信任文件夹之外,VS Code 会检测到该文件来自文件夹根目录之外,并提示您选择继续打开该文件或在受限模式下的新窗口中打开该文件。以受限模式打开是最安全的选择,一旦您确定文件是可信的,您可以随时在原来的 VS Code 窗口中重新打开该文件。

如果您希望在打开不受信任工作区之外的文件时不收到提示,可以将 security.workspace.trust.untrustedFiles 设置为 open。您还可以将 security.workspace.trust.untrustedFiles 设置为 newWindow,以便始终在受限模式下创建新窗口。在不受信任文件对话框中勾选 记住我对所有工作区的决定 选项,会将您的选择应用于 security.workspace.trust.untrustedFiles 用户设置。
打开不受信任的文件夹
当使用包含多个文件夹的 多根工作区 时,如果您尝试将新文件夹添加到受信任的多根工作区,系统会提示您决定是否信任该文件夹中的文件;如果选择不信任,整个工作区将切换到受限模式。

空窗口(未打开文件夹)
默认情况下,如果您在未打开文件夹或工作区的情况下打开新的 VS Code 窗口(实例),VS Code 会以完全信任状态运行该窗口。所有已安装的扩展程序都会被启用,您可以不受限制地使用空窗口。
当您打开文件时,系统会提示您是否要打开 不受信任的文件,因为没有文件夹作为其父级。
您可以使用工作区信任编辑器(在命令面板中选择 Workspaces: Manage Workspace Trust)将空窗口切换到受限模式,然后选择 不信任。空窗口在当前会话中保持在受限模式,但如果您重新启动或创建新窗口,它会恢复为受信任状态。
如果您希望所有空窗口都处于受限模式,可以将 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 命令行禁用工作区信任。此开关仅影响当前会话。
后续步骤
了解更多信息,请访问
- 工作区信任扩展指南 - 了解扩展作者如何支持工作区信任。
- 什么是 VS Code“工作区”? - 了解更多关于 VS Code“工作区”概念的详细信息。
- GitHub Repositories 扩展 - 直接在存储库上工作,而无需将源代码克隆到本地计算机。
常见问题
我仍然可以在受限模式下编辑我的源代码吗?
是的,您仍然可以在受限模式下浏览和编辑源代码。某些语言功能可能会被禁用,但始终支持文本编辑。
我安装的扩展程序去哪了?
在受限模式下,任何不支持工作区信任的扩展程序都将被禁用,并且所有 UI 元素(如活动栏图标和命令)将不会显示。
您可以使用 extensions.supportUntrustedWorkspaces 设置覆盖扩展程序的工作区信任支持级别,但请务必谨慎操作。启用扩展程序 有更多详细信息。
我可以禁用工作区信任功能吗?
您可以禁用,但不建议这样做。如果您不希望 VS Code 在打开新文件夹或存储库时检查工作区信任,可以将 security.workspace.trust.enabled 设置为 false。VS Code 将表现得像 1.57 版本发布之前一样。
如何取消对文件夹/工作区的信任?
调出工作区信任编辑器(命令面板中的 Workspaces: Manage Workspace Trust)并选择 不信任 按钮。您还可以从 受信任的文件夹和工作区 列表中删除该文件夹。
为什么我没有看到“不信任”按钮?
如果您在工作区信任对话框中没有看到 不信任 按钮,则该文件夹的信任级别可能是从父文件夹继承的。请检查 受信任的文件夹和工作区 列表,查看父文件夹是否启用了工作区信任。
某些工作流程(例如连接到 GitHub Codespace 或 连接到正在运行的 Docker 容器)会自动被信任,因为这些是您应该已经具有高度信任的管理环境。
工作区信任可以防止什么?
VS Code 的许多功能允许第三方工具和扩展自动运行,例如 linting 或保存时格式化,或者在您进行编译代码或调试等某些操作时。一个不道德的人可能会精心制作一个看起来无害的项目,在您不知情的情况下运行恶意代码并损害您的本地计算机。工作区信任通过在您评估陌生源代码的安全性和完整性时试图防止代码执行,提供了一层额外的安全保护。