本站点文档内容均翻译自code.visualstudio.com,仅供个人学习,如有差异请以官网为准。

工作区信任

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

信任此文件夹对话框

注意:当不确定时,请将文件夹留在受限模式中。您可以随时稍后启用信任

安全代码浏览

在公共存储库和文件共享上有很多可用的源代码,这很棒。无论编码任务或问题如何,很可能已经有一个好的解决方案。还有许多强大的编码工具可以帮助您理解、调试和优化代码,这也很棒。然而,使用开源代码和工具确实存在风险,您可能会让自己暴露在恶意代码执行和利用的危险中。

Workspace Trust 在使用不熟悉的代码时提供额外的安全层,如果将工作区以“受限模式”打开,它将阻止对工作区中任何代码的自动代码执行。

注意

“工作区”和“文件夹”在 VS Code 的用户界面和文档中被广泛使用。你可以将“工作区”视为一个由 VS Code 创建和使用的带有额外元数据的文件夹。

受限模式

当工作区信任对话框提示时,如果你选择不,我不信任作者,VS Code会进入受限模式以防止代码执行。

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

工作区信任受限模式横幅

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

要查看受限模式中禁用的所有功能列表,您可以通过横幅中的管理链接打开Workspace Trust编辑器,或者在状态栏中选择受限模式徽章。

工作区信任编辑器

重要

工作区信任无法防止恶意扩展执行代码并忽略受限模式。您应该只安装和运行来自您信任的知名发布者的扩展。

人工智能代理

当您使用 VS Code 中的 AI 助力开发功能(如代理)时,这些代理会代表您执行操作,包括更改代码库、运行终端命令或调用网络请求。任何文件都可能通过使用代理被拉入上下文中,这在理论上可能导致提示注入攻击。

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

了解更多关于AI安全注意事项在VS Code中使用AI驱动的开发功能时。

任务

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

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

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

调试

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

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

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

工作区设置

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

工作区信任编辑器工作区设置链接

在Workbench Trust编辑器中,选择未应用的工作区设置链接,以显示按工作区设置的设置编辑器@标签:需要受信任的工作区标签。

设置编辑器在受限工作区中受限,由 requireTrustedWorkspace 标签限定

扩展

VS Code的扩展生态系统非常丰富多样。人们已经创建了扩展来帮助完成几乎任何编程任务或编辑器定制。一些扩展提供了完整的编程语言支持(IntelliSense、调试、代码分析),而另一些则让你可以播放音乐或养虚拟宠物

大多数扩展会在你的 behalf运行代码,并且有可能造成危害。一些扩展有设置,如果配置为运行意外的可执行文件,可能会使其恶意操作。因此,在受限模式下,未明确选择信任工作区的扩展默认会被禁用。

工作区信任禁用扩展链接

您可以通过选择 禁用或限制功能的扩展 链接来查看已安装扩展的状态,该链接显示的扩展视图受限于 @工作区不支持过滤器。

扩展视图按工作区过滤,不支持显示已禁用和受限的扩展。

未选择参与Workspace Trust的扩展将在受限模式下被禁用或限制。

受限模式禁用

未明确表示支持在受限模式下运行的扩展显示在在受限模式下禁用部分。扩展作者还可以表示如果他们认为扩展可能会因工作区中的修改(设置或文件)而被滥用,则从不希望在受限模式下启用。

受限于受限模式

插件作者还可以评估他们的插件是否存在可能的安全漏洞,并声明在受限模式下运行时他们有有限的支持。此模式意味着插件可能会禁用某些功能或功能,以防止可能的利用。

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

php.验证.可执行文件路径
  • 在 VS Code 中打开
  • 在 VS Code Insiders 中打开
设置为受信任文件夹,因为覆盖此设置可能会运行恶意程序。

PHP 扩展在受限模式悬停时受限

您可以使用以下内容覆盖扩展的Workspace Trust支持级别

extensions.supportUntrustedWorkspaces
  • 在 VS Code 中打开
  • 在 VS Code Insiders 中打开
设置,描述在 启用扩展 部分下面。

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

工作区信任在受限模式对话框中安装扩展

注意

扩展作者可以通过阅读工作区信任扩展指南来了解如何更新他们的扩展以支持工作区信任。

信任工作区

如果你信任一个项目的作者和维护者,那么你可以信任你本地机器上该项目的文件夹。例如,通常来说,信任来自知名 GitHub 组织的仓库是安全的,比如 github.com/microsoft 或 github.com/docker。

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

信任此文件夹对话框

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

工作区信任编辑器信任按钮

有几种方法可以打开Workbench Trust编辑器对话框。

在受限模式下:

  • 受限模式横幅管理链接
  • 受限模式状态栏项目

您也可以随时使用:

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

选择文件夹

当您信任一个文件夹时,它会被添加到受信文件夹和工作区列表中,该列表显示在工作区信任编辑器中。

工作区信任编辑器 受信任文件夹和工作区列表

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

选择父文件夹

当您通过工作区信任编辑器信任一个文件夹时,您可以选择信任其父文件夹。这将信任父文件夹及其所有子文件夹。

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

如果你有很多包含可信内容的文件夹都位于一个文件夹下,信任父文件夹可能会很有帮助。

当你打开一个受信任父文件夹下的子文件夹时,你不会看到通常的不要信任按钮将你重新置于受限模式。相反,会有一些文字提到你的文件夹由于另一个文件夹而被信任。

您可以添加、修改和删除父文件夹条目受信任的文件夹和工作区列表。

文件夹配置

当您信任一个父文件夹时,所有子文件夹都会被信任,这使您能够通过仓库在磁盘上的位置来控制工作区信任。

例如,您可以将所有受信任的仓库放在一个名为“TrustedRepos”的父文件夹下,将不熟悉的仓库放在另一个父文件夹下,例如“ForEvaluation”。您将信任“TrustedRepos”文件夹,并选择性地信任“ForEvaluation”下的文件夹。

├── TrustedRepos - 克隆此父文件夹下的受信任的仓库
└── ForEvaluation - 克隆此父文件夹下的实验性或不熟悉的仓库

您还可以通过将它们分组到特定于组织的父文件夹中来对您的存储库进行分组并设置信任。

├── github/microsoft - 在此父文件夹下克隆特定组织的仓库
├── github/{myforks} - 将你 fork 的仓库放置在此父文件夹下
└── local - 本地未发布仓库

启用扩展

如果你想要使用受限模式,但你最喜欢的扩展不支持工作区信任会发生什么?这可能会发生在某个扩展虽然有用且功能齐全,但没有被积极维护,并且没有声明他们对工作区信任的支持。为了处理这种情况,你可以通过以下方式覆盖扩展的信任状态

extensions.supportUntrustedWorkspaces
  • 在 VS Code 中打开
  • 在 VS Code Insiders 中打开
设置。

重要

谨慎覆盖扩展的Workspace Trust支持。扩展作者可能在受限模式下禁用其扩展有充分的理由。如果不确定,可以联系扩展作者或查看最近的更改日志以获取更多上下文信息。

在设置编辑器中(⌘, (Windows, Linux Ctrl+,)),你可以通过 扩展:支持不信任的工作区 设置覆盖单个扩展的工作区信任(

extensions.supportUntrustedWorkspaces
  • 在 VS Code 中打开
  • 在 VS Code Insiders 中打开
)。

扩展支持

选择 在 settings.json 中编辑 链接来管理扩展 ID 列表及其支持状态和版本。您可以通过 IntelliSense 建议选择任何已安装的扩展。

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

  "extensions.supportUntrustedWorkspaces": {
    "esbenp.prettier-vscode": {
      "支持": true,
      "版本": "6.4.0"
    },
  },

您可以启用或禁用工作区信任支持支持属性。版本该属性指定了适用的确切扩展版本,如果您想为所有版本设置状态,则可以删除版本字段。

如果您想了解更多关于扩展作者如何评估和确定在受限模式下限制哪些功能的信息,您可以阅读Workspace Trust Extension Guide

打开不受信任的文件

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

不可信文件对话框

如果您不希望在从非受信工作区打开文件时收到提示,您可以设置

安全.工作区.信任.不受信任的文件
  • 在 VS Code 中打开
  • 在 VS Code Insiders 中打开
打开您还可以设置
安全.工作区.信任.不受信任的文件
  • 在 VS Code 中打开
  • 在 VS Code Insiders 中打开
新Windows 在受限模式下始终创建一个新Windows。在不可信文件对话框中勾选 记住我的决定,适用于所有工作区 选项应用您的选择到
安全.工作区.信任.不受信任的文件
  • 在 VS Code 中打开
  • 在 VS Code Insiders 中打开
用户设置。

打开不受信任的文件夹

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

不受信任的文件夹对话框

空Windows(没有打开的文件夹)

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

当你打开一个文件时,系统会提示你是否要打开一个不受信任的文件,因为没有文件夹来作为其父目录。

您可以通过使用工作区信任编辑器(在命令面板中选择工作区:管理工作区信任),然后选择不要信任将空Windows切换到受限模式。空Windows将在您当前的会话中保持受限模式,但如果重新启动或创建一个新Windows,则会恢复为受信任状态。

如果你想让所有空Windows都处于受限模式,你可以设置

安全.工作区.信任.空Windows
  • 在 VS Code 中打开
  • 在 VS Code Insiders 中打开
输入:.

设置

以下是可以使用的Workspace Trust设置:

  • security.workspace.trust.enabled
    • 在 VS Code 中打开
    • 在 VS Code Insiders 中打开
    - 启用工作区信任功能。默认为真。
  • 安全.工作区.信任.启动提示
    • 在 VS Code 中打开
    • 在 VS Code Insiders 中打开
    - 启动时是否显示工作区信任对话框。默认情况下,只会在每个不同的文件夹或工作区中显示一次。
  • 安全.工作区.信任.空Windows
    • 在 VS Code 中打开
    • 在 VS Code Insiders 中打开
    - 是否始终信任空Windows(没有打开的文件夹)。默认为真。
  • 安全.工作区.信任.不受信任的文件
    • 在 VS Code 中打开
    • 在 VS Code Insiders 中打开
    - 控制如何处理工作区中的松散文件。默认是提示。
  • extensions.supportUntrustedWorkspaces
    • 在 VS Code 中打开
    • 在 VS Code Insiders 中打开
    - 覆盖扩展工作区信任声明。 true 或 false。
  • 安全.工作区.信任.横幅
    • 在 VS Code 中打开
    • 在 VS Code Insiders 中打开
    - 控制显示受限模式横幅的时间。默认是直到被解散输入:.

命令行开关

您可以通过在 VS Code 命令行中传递来禁用 Workspace Trust--禁用工作区信任这个开关只会影响当前会话。

下一步

了解更多:

常见问题

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

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

我的已安装扩展到哪里去了?

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

您可以使用以下内容覆盖扩展的Workspace Trust支持级别

extensions.supportUntrustedWorkspaces
  • 在 VS Code 中打开
  • 在 VS Code Insiders 中打开
设置,但要小心。启用扩展有更多详细信息。

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

您可以,但不推荐。如果您不希望 VS Code 在打开新文件夹或仓库时检查工作区信任,您可以设置

security.workspace.trust.enabled
  • 在 VS Code 中打开
  • 在 VS Code Insiders 中打开
设置为假。VS Code 将会像 1.57 版本发布之前那样运行。

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

打开工作区信任编辑器 (工作区: 管理工作区信任 从命令面板) 并选择不信任 按钮。您也可以从受信任的文件夹和工作区 列表中移除该文件夹。

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

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

一些工作流程,例如连接到一个GitHub Codespace附加到一个正在运行的Docker容器,自这些是您已经高度信任的受管环境以来,这些工作流程是自动信任的。

工作区信任保护 against什么?

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