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

安全代码浏览
公共仓库和文件共享中存在大量源代码,这非常棒。无论编码任务或问题如何,可能已经有很好的解决方案可用。拥有如此多的强大编码工具来帮助您理解、调试和优化代码也很棒。但是,使用开源代码和工具确实存在风险,您可能会面临恶意代码执行和漏洞利用的风险。
当您使用不熟悉的代码时,工作区信任提供了一层额外的安全性,通过在工作区以“限制模式”打开时阻止工作区中任何代码的自动执行。
“工作区”和“文件夹”这两个术语在 VS Code 的用户界面和文档中被广泛使用。您可以将 “工作区” 视为 VS Code 创建和使用的具有额外元数据的文件夹。
限制模式
当您在工作区信任对话框中看到提示时,如果您选择我不信任这些作者,VS Code 将进入限制模式以防止代码执行。
工作台会在顶部显示一个带有指向 管理 文件夹的链接的横幅,通过工作区信任编辑器进行管理。您还可以在状态栏中看到一个徽章,指示工作区处于限制模式。

限制模式尝试通过禁用或限制以下 VS Code 功能的运行来防止自动代码执行:AI 代理、任务、调试、工作区设置和扩展。
要查看限制模式下禁用的完整功能列表,您可以打开工作区信任编辑器,方法是单击横幅中的 管理 链接,或选择状态栏中的限制模式徽章。工作区信任编辑器默认以 模态覆盖 形式显示在编辑器区域之上。

工作区信任无法阻止恶意扩展执行代码并忽略 限制模式。您应该只安装和运行来自您信任的知名发布者的扩展。
AI 代理
当您在 VS Code 中使用 AI 驱动的开发功能(如代理)时,这些代理会代表您执行操作,包括更改您的代码库、运行终端命令或调用 Web 请求。任何文件都可能通过使用代理被拉入上下文,理论上可能导致提示注入攻击。
在您审查项目是否存在恶意内容之前,请依赖工作区信任边界并以限制模式打开它。以限制模式打开工作区会禁用该工作区中的代理。
了解更多关于 AI 安全注意事项,在使用 VS Code 中的 AI 驱动的开发功能时。
任务
VS Code 任务 可以运行脚本和工具二进制文件。由于任务定义是在工作区 .vscode 文件夹中定义的,因此它们是仓库提交的源代码的一部分,并与该仓库的每个用户共享。如果有人创建了恶意任务,那么克隆该仓库的任何人可能会不知不觉地运行它。
如果您在限制模式下尝试运行或枚举任务(任务 > 运行任务),VS Code 会显示一个提示,以确认您信任该文件夹并可以继续执行该任务。如果您取消该对话框,VS Code 将保持在限制模式下。

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

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

在工作区信任编辑器中,选择指向未应用的 Workspace 设置的链接,以调出使用 @tag:requireTrustedWorkspace 标签限定的设置编辑器。

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

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

未选择加入工作区信任的扩展可以在限制模式下被禁用或限制。
在限制模式下禁用
在限制模式下显示的 禁用在限制模式下 部分中的扩展,要么没有明确表明它们支持在限制模式下运行,或者扩展作者也可能表明他们永远不希望在限制模式下启用它们,如果他们确定他们的扩展可能会被工作区中的修改(设置或文件)滥用。
在限制模式下限制
扩展作者还可以评估其扩展是否存在潜在的安全漏洞,并声明它们在以限制模式运行时具有 有限 支持。这种模式意味着扩展可能会禁用某些功能或功能以防止可能的漏洞利用。
扩展可以向扩展视图中的工作区信任徽章添加自定义文本,解释在不受信任的文件夹中运行时受到的限制。例如,VS Code 内置的 PHP 扩展限制了

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

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

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

有几种方法可以调出工作区信任编辑器对话框。
在限制模式下
- 限制模式横幅 管理 链接
- 限制模式状态栏项目
您还可以随时使用
- 工作区:管理工作区信任 命令从命令面板 (⇧⌘P (Windows, Linux Ctrl+Shift+P))
选择文件夹
当您信任一个文件夹时,它将被添加到工作区信任编辑器中显示的 受信任的文件夹和工作区 列表中。

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

如果您在单个文件夹下放置了许多具有受信任内容的文件夹,信任父文件夹可能会有所帮助。
当您打开受信任父文件夹下的子文件夹时,您将不会看到通常的 不信任 按钮将您带回限制模式。相反,会有一段文字说明您的文件夹由于另一个文件夹而受到信任。
您可以从 受信任的文件夹和工作区 列表中添加、修改和删除父文件夹条目。
文件夹配置
当您信任父文件夹时,所有子文件夹都将受到信任,从而使您可以控制磁盘上仓库位置的工作区信任。
例如,您可以将所有受信任的仓库放在一个“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
启用扩展
如果您想使用限制模式,但您最喜欢的扩展程序不支持工作区信任怎么办?如果扩展程序虽然有用且功能强大,但未积极维护并且尚未声明其工作区信任支持,则可能会发生这种情况。为了处理这种情况,您可以使用
请小心覆盖扩展程序的工作区信任支持级别。扩展程序作者可能有充分的理由在限制模式下禁用其扩展程序。如有疑问,请联系扩展程序作者或查看最近的更改日志以获取更多上下文。
在设置编辑器中(⌘, (Windows, Linux Ctrl+,)),您可以通过扩展:支持不受信任的工作区设置(

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

如果您不想在打开来自不受信任工作区的 文件时收到提示,您可以设置
open。您还可以将 newWindow,以始终在新窗口中以受限模式创建。在不受信任的文件对话框中选中记住我对所有工作区的决定选项会将您的选择应用于 打开不受信任的文件夹
在使用具有多个文件夹的多根工作区时,如果您尝试将新文件夹添加到受信任的多根工作区,系统会提示您决定是否信任该文件夹中的文件,否则整个工作区将切换到受限模式。

空窗口(未打开文件夹)
默认情况下,如果您打开一个没有打开文件夹或工作区的新 VS Code 窗口(实例),VS Code 会以完全信任的方式运行该窗口。所有已安装的扩展都已启用,您可以无限制地使用空窗口。
当您打开一个文件时,系统会提示您是否要打开一个不受信任的文件,因为没有文件夹作为其父文件夹。
您可以使用工作区信任编辑器(从命令面板中选择工作区:管理工作区信任)将空窗口切换到受限模式,然后选择不信任。空窗口在您当前会话中保持受限模式,但如果您重新启动或创建新窗口,则会恢复到受信任状态。
如果您希望所有空窗口都处于受限模式,您可以设置
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 仓库扩展 - 直接在仓库上工作,无需将源代码克隆到本地计算机。
常见问题
我仍然可以在受限模式下编辑我的源代码吗?
是的,您仍然可以在受限模式下浏览和编辑源代码。某些语言功能可能会被禁用,但始终支持文本编辑。
我的已安装扩展在哪里?
在受限模式下,任何不支持工作区信任的扩展都将被禁用,并且所有 UI 元素(例如活动栏图标和命令)将不会显示。
您可以使用
我可以禁用工作区信任功能吗?
您可以,但不建议这样做。如果您不希望 VS Code 在打开新文件夹或仓库时检查工作区信任,您可以将
如何取消信任文件夹/工作区?
调出工作区信任编辑器(从命令面板中选择工作区:管理工作区信任),然后选择不信任按钮。您还可以从受信任的文件夹和工作区列表中删除该文件夹。
为什么我看不到“不信任”按钮?
如果您在工作区信任对话框中看不到不信任按钮,则该文件夹的信任级别可能已从父文件夹继承。查看受信任的文件夹和工作区列表,以检查父文件夹是否已启用工作区信任。
某些工作流,例如连接到GitHub Codespace或附加到正在运行的 Docker 容器,会自动信任,因为这些是您应该已经具有高度信任度的托管环境。
工作区信任可以防止什么?
VS Code 的许多功能允许第三方工具和扩展自动运行,例如保存时进行 linting 或格式化,或者在您执行某些操作(例如编译代码或调试)时。不道德的人可能会制作一个看似无害的项目,该项目会在您不知情的情况下运行恶意代码并损害您的本地计算机。工作区信任通过在您评估不熟悉的源代码的安全性与完整性时尝试防止代码执行来提供额外的安全层。