工作空间信托

Visual Studio Code 非常重视安全,致力于帮助您安全地浏览和编辑代码,无论代码源或原作者为何。Workspace Trust 功能允许你决定项目文件夹中的代码是否可以在没有你明确批准的情况下被 VS Code 及其扩展执行。

请相信这个文件夹对话框

注意:有疑问时,将文件夹设为受限模式。你总可以以后启用信任

安全码浏览

公开仓库和文件共享中有这么多源代码,这很棒。无论编码任务或问题是什么,可能已经有好的解决方案存在。同样很棒的是,有这么多强大的编码工具可以帮助你理解、调试和优化代码。然而,使用开源代码和工具确实存在风险,你可能会暴露于恶意代码执行和被利用的风险。

Workspace Trust 在处理不熟悉代码时,提供了额外的安全层,如果工作区处于“受限模式”状态,则会自动执行任何代码。

注释

“工作区”和“文件夹”这两个术语在 VS Code 的用户界面和文档中被广泛使用。你可以把“工作区”看作是 VS Code 创建并使用的额外元数据的文件夹。

限制模式

当你在工作空间信任对话框中选择“否,我不信任作者”时,VS Code 会进入受限模式以防止代码执行。

工作台顶部会显示一个横幅,并附带通过 Workspace Trust 编辑器管理文件夹的链接。在状态栏中,你还可以看到一个徽章,表示工作区处于受限模式。

工作空间信任限制模式横幅

限制模式试图通过禁用或限制多个 VS Code 功能的运行来防止自动代码执行:AI 代理、任务、调试、工作区设置和扩展。

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

Workspace Trust 编辑器

重要

Workspace Trust 无法阻止恶意扩展执行代码并忽视限制模式。你应该只安装并运行来自你信任的知名发行商的扩展。

人工智能代理

当你使用AI驱动的开发功能,比如VS Code中的代理时,这些代理会代表你执行作,包括修改代码库、运行终端命令或调用网页请求。任何文件都可以通过代理被拉入上下文,理论上可能导致即时注入攻击。

在你审查项目是否有恶意内容之前,请依靠Workspace Trust的边界,并以限制模式打开它。以受限模式打开工作区会禁用该工作区中的代理。

了解更多关于在VS Code中使用AI驱动开发功能时的AI安全考虑

任务

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

如果你在限制模式下尝试运行或枚举任务(任务>执行任务),VS Code 会显示提示确认你信任该文件夹并能继续执行任务。如果你取消对话,VS Code会保持在受限模式。

工作区信任限制模式任务对话框

调试

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

如果你在限制模式下尝试启动调试会话(调试>开始调试),VS Code 会显示提示确认你信任该文件夹并能继续启动调试器。如果你取消了对话框,VS Code 会保持在受限模式,不会启动调试会话。

工作区信任受限模式调试对话框

工作区设置

工作区设置存储在.vscode这些文件夹都存在于你工作区的根节点,因此任何克隆工作区仓库的人都会共享这些文件夹。某些设置包含可执行文件的路径(例如,线条二进制文件),如果设置为指向恶意代码,可能会造成损害。因此,VS Code 在限制模式下会禁用一组工作区设置。

Workspace Trust 编辑器 工作区设置链接

在 Workspace Trust 编辑器中,选择未应用的工作区设置链接,以调出由@tag:requireTrustedWorkspace捉人。

设置编辑器在受限工作区中由requireTrustedWorkspace标签作用范围

扩展

VS Code 扩展生态系统极其丰富多样。人们已经创建了扩展来帮助几乎所有编程任务或编辑器定制。有些扩展支持完整的编程语言(IntelliSense、调试、代码分析),还有些可以播放音乐或养虚拟宠物

大多数扩展会代你运行代码,可能会造成伤害。有些扩展设置了如果设置成运行意外可执行文件,可能会恶意行为。因此,未明确选择加入Workspace Trust的扩展在受限模式下默认被禁用。

Workspace Trust 禁用扩展链接

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

扩展视图 按工作区筛选 不支持 显示禁用和有限扩展

未选择加入Workspace Trust的扩展可以在受限模式下被禁用或限制。

在限制模式下被禁用

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

限制模式下的限制

扩展作者还可以评估其扩展可能存在的安全漏洞,并在限制模式下声明其支持有限。该模式意味着扩展可能会禁用某些功能,以防止可能的漏洞利用。

扩展可以在扩展视图中的工作区信任徽章中添加自定义文本,解释在不受信任文件夹中运行时的限制。例如,VS Code 内置的 PHP 扩展限制了

php.validate.executablePath
  • 在VS代码中打开
  • 在VS Code Insiders中开放
设置为可信文件夹,因为覆盖该设置可能会运行恶意程序。

限制模式下悬停的PHP扩展

你可以通过以下方式覆盖扩展的 Workspace Trust 支持级别

extensions.supportUntrustedWorkspaces
  • 在VS代码中打开
  • 在VS Code Insiders中开放
设置,详见下文“赋能扩展”部分。

如果你尝试在限制模式下安装扩展,系统会提示你要么信任工作区,要么直接安装扩展。如果扩展不支持 Workspace Trust,则安装了,但会被禁用或功能受限。

Workspace Trust 在受限模式下安装扩展

注释

扩展作者可以通过阅读《Workspace Trust Extension 指南》来学习如何更新扩展以支持Workspace Trust。

信任工作空间

如果你信任项目的作者和维护者,你也可以信任本地机器上的项目文件夹。例如,通常可以放心信任知名GitHub组织如 github.com/microsoft 或 github.com/docker 的仓库。

当你打开一个新文件夹时,初始的 Workspace Trust 提示会让你信任该文件夹及其子文件夹。

请相信这个文件夹对话框

你也可以打开工作区编辑器,通过选择信任信任父选项快速切换文件夹的信任状态。

工作空间信任编辑器 信任按钮

有几种方式可以调出 Workspace Trust 编辑器对话框。

在限制模式下:

  • 限制模式横幅管理链接
  • 限制模式状态栏条项

你还可以随时使用:

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

选择文件夹

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

Workspace Trust 编辑器 Trusted 文件夹和 Workspaces 列表

你可以手动添加、编辑和移除该列表中的文件夹,以启用或禁用工作区信任。当前文件夹在此列表中以加粗显示。

选择父文件夹

通过Workspace Trust编辑器信任某个文件夹时,你也可以选择信任父文件夹。这对父文件夹及其所有子文件夹施加信任。

工作区信任编辑器显示信任父级按钮

如果你有多个可信内容的文件夹共置在同一个文件夹下,信任父文件夹会很有帮助。

当你在可信的父文件夹下打开子文件夹时,你不会看到通常的“不要信任”按钮,把你重新切换到限制模式。相反,会有文字说明你的文件夹因为另一个文件夹而被信任。

你可以添加、修改和移除可信文件夹和工作区列表中的父文件夹条目。

文件夹配置

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

例如,你可以把所有受信任的仓库放在“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

启用扩展

如果你想使用限制模式,但你喜欢的扩展不支持 Workspace Trust,会发生什么?如果扩展虽然有用且功能正常,但没有被积极维护,也没有声明其工作空间信任支持,这种情况就会发生。为了处理这种情况,你可以用

extensions.supportUntrustedWorkspaces
  • 在VS代码中打开
  • 在VS Code Insiders中开放
环境。

重要

要小心不要覆盖扩展的 Workspace Trust 支持。扩展作者可能有充分理由在受限模式下禁用扩展。如果有疑问,请联系扩展作者或查看最近的更改日志以获取更多背景信息。

在设置编辑器(⌘,(Windows, Linux Ctrl+,)中,你可以通过“扩展:支持不受信任的工作空间”设置来覆盖单个扩展的 Workspace Trust(

extensions.supportUntrustedWorkspaces
  • 在VS代码中打开
  • 在VS Code Insiders中开放
).

扩展支持

点击“编辑”链接settings.json管理扩展ID及其支持状态和版本列表。你可以通过IntelliSense的建议选择你安装的任何扩展。

下面你可以看到一个settings.jsonPrettier扩展的条目。

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

你可以启用或禁用 Workspace Trust 支持,支持属性。该版本属性指定了适用的具体扩展版本,如果你想设置所有版本的状态,可以移除版本字段。

如果您想了解更多扩展作者如何评估和决定限制受限模式的功能,可以阅读《Workspace Trust 扩展指南》。

打开不受信任的文件

如果你打开一个位于受信任文件夹之外的文件,VS Code 会检测该文件来自文件夹根目录外,并提示你继续打开该文件,或者在受限模式下的新窗口打开该文件。在限制模式下打开是最安全的选择,一旦确定文件可信,你随时可以在原来的VS代码窗口重新打开文件。

不可信文件对话框

如果你不想在打开外部可信工作区文件时被提示,可以设置

security.workspace.trust.untrustedFiles
  • 在VS代码中打开
  • 在VS Code Insiders中开放
开门.你也可以设置
security.workspace.trust.untrustedFiles
  • 在VS代码中打开
  • 在VS Code Insiders中开放
新窗在限制模式下总是创建新窗口。在不可信任文件对话框中勾选“记住我所有工作区的决定”选项,将你的选择应用到
security.workspace.trust.untrustedFiles
  • 在VS代码中打开
  • 在VS Code Insiders中开放
用户设置。

打开不受信任的文件夹

在处理多根工作区和多个文件夹时,如果你尝试向可信的多根工作区添加新文件夹,系统会提示你决定是否信任该文件夹里的文件,或者如果不信任,整个工作区会切换到受限模式。

不可信文件夹对话框

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

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

打开文件时,系统会提示你是否要打开不受信任的文件,因为没有文件夹作为父级。

你可以用工作区信任编辑器(在命令面板中选择工作区:管理工作区信任),然后选择“不信任”,将空窗口切换为受限模式。当前会话的空白窗口仍处于受限模式,但如果你重启或创建新窗口,窗口会恢复为可信模式。

如果你想让所有空窗口都处于限制模式,你可以设置

security.workspace.trust.emptyWindow
  • 在VS代码中打开
  • 在VS Code Insiders中开放
错误.

背景设定

以下是可用的工作空间信任设置:

  • security.workspace.trust.enabled
    • 在VS代码中打开
    • 在VS Code Insiders中开放
    - 启用工作空间信任功能。默认是真的。
  • security.workspace.trust.startupPrompt
    • 在VS代码中打开
    • 在VS Code Insiders中开放
    - 启动时是否显示工作空间信任对话框。默认情况下,每个不同的文件夹或工作区只显示一次。
  • security.workspace.trust.emptyWindow
    • 在VS代码中打开
    • 在VS Code Insiders中开放
    - 是否总是信任空窗口(无打开文件夹)。默认是真的。
  • security.workspace.trust.untrustedFiles
    • 在VS代码中打开
    • 在VS Code Insiders中开放
    - 控制工作区中松散文件的处理方式。默认是提示。
  • extensions.supportUntrustedWorkspaces
    • 在VS代码中打开
    • 在VS Code Insiders中开放
    - 覆盖扩展工作区信托声明。要么是真的,要么是假的。
  • security.workspace.trust.banner
    • 在VS代码中打开
    • 在VS Code Insiders中开放
    - 限制模式横幅显示时的控制。默认是直到被解雇.

命令行交换机

你可以通过 VS Code 命令行通过 Pass 关闭 Workspace Trust--禁用-工作区-信任.这个切换只影响当前会话。

下一步

了解更多信息请访问:

常见问题

我还能在受限模式下编辑我的源代码吗?

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

我安装的扩展去哪儿了?

在受限模式下,任何不支持Workspace Trust的扩展都会被禁用,所有UI元素如活动栏图标和命令都不会显示。

你可以用以下方式覆盖扩展的 Workspace Trust 支持层级

extensions.supportUntrustedWorkspaces
  • 在VS代码中打开
  • 在VS Code Insiders中开放
但要小心地设置。启用扩展有更多细节。

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

你可以,但不推荐。如果你不想让VS Code在打开新文件夹或仓库时检查工作空间信任,你可以设置

security.workspace.trust.enabled
  • 在VS代码中打开
  • 在VS Code Insiders中开放
太虚假了。VS Code 的表现会和 1.57 版本发布前一样。

我该如何取消对某个文件夹/工作区的信任?

打开工作区信任编辑器(Workspaces: Manage Workspace Trust,从命令调色板中作),然后选择“不信任”按钮。你也可以将该文件夹从受信任文件夹和工作区列表中移除。

我怎么没看到“不要信任”按钮?

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

一些工作流程,比如连接 GitHub 代码空间附加到运行中的 Docker 容器,是自动被信任的,因为这些是托管环境,你本应对它们有很高的信任。

Workspace Trust保护哪些内容?

VS Code 的许多功能允许第三方工具和扩展自动运行,比如保存时的线索处理或格式化,或者在编译代码或调试等作时执行。一个不道德的人可能会设计一个看似无害的项目,在你不知情的情况下运行恶意代码,损害你的本地机器。Workspace Trust通过在评估陌生源代码的安全性和完整性时,试图阻止代码执行,从而提供额外的安全层。