工作区信任
Visual Studio Code 非常重视安全性,并希望帮助您安全地浏览和编辑代码,无论其来源或原作者如何。工作区信任功能让您决定项目文件夹中的代码是否可以在未经您明确批准的情况下由 VS Code 和扩展程序执行。
安全代码浏览
在公共仓库和文件共享上有如此多的源代码可用,这真是太棒了。无论是什么编码任务或问题,可能已经有一个很好的解决方案在某处可用。同样令人高兴的是,有许多强大的编码工具可以帮助你理解、调试和优化你的代码。然而,使用开源代码和工具确实存在风险,你可能会让自己暴露在恶意代码执行和漏洞利用的风险中。
工作区信任在您处理不熟悉的代码时提供了一层额外的安全性,如果工作区在“受限模式”下打开,它会阻止工作区中任何代码的自动执行。
注意:术语“workspace”和“folder”在VS Code的用户界面和文档中广泛使用。你可以将“workspace”视为一个包含由VS Code创建和使用的额外元数据的文件夹。
受限模式
当工作区信任对话框提示时,如果您选择不,我不信任作者,VS Code 将进入受限模式以防止代码执行。
工作台在顶部显示一个横幅,带有通过工作区信任编辑器管理文件夹的链接。在状态栏中,您还可以看到一个徽章,指示工作区处于受限模式。
受限模式尝试通过禁用或限制多个VS Code功能的操作来防止自动代码执行:任务、调试、工作区设置和扩展。
要查看受限模式下禁用的完整功能列表,您可以通过横幅中的管理链接打开工作区信任编辑器,或者通过选择状态栏中的受限模式徽章。
重要: 工作区信任无法阻止恶意扩展执行代码并忽略受限模式。您应该只安装和运行来自您信任的知名发布者的扩展。
任务
VS Code tasks 可以运行脚本和工具二进制文件。由于任务定义是在工作区的 .vscode
文件夹中定义的,它们是仓库提交的源代码的一部分,并共享给该仓库的每个用户。如果有人创建了一个恶意任务,任何克隆该仓库的人都可能在不知情的情况下运行它。
如果您在受限模式下尝试运行甚至枚举任务(任务 > 运行任务),VS Code 会显示一个提示,以确认您信任该文件夹并可以继续执行任务。如果您取消对话框,VS Code 将保持在受限模式。
调试
类似于运行VS Code任务,调试扩展可以在启动调试会话时运行调试器二进制文件。因此,当文件夹在受限模式下打开时,调试也被禁用。
如果您在受限模式下尝试启动调试会话(调试 > 开始调试),VS Code 会显示一个提示,确认您信任该文件夹并可以继续启动调试器。如果您取消对话框,VS Code 将保持在受限模式下,并且不会启动调试会话。
工作区设置
工作区设置存储在您工作区根目录的.vscode
文件夹中,因此任何克隆工作区仓库的人都可以共享这些设置。一些设置包含可执行文件的路径(例如,linter二进制文件),如果这些路径指向恶意代码,可能会造成损害。因此,VS Code在受限模式下运行时禁用了一组工作区设置。
在工作区信任编辑器中,选择未应用的工作区设置链接,以打开由@tag:requireTrustedWorkspace
标签限定的设置编辑器。
扩展
VS Code 的 扩展 生态系统非常丰富多样。人们创建了各种扩展来帮助完成几乎任何编程任务或编辑器定制。一些扩展提供了完整的编程语言支持(智能感知、调试、代码分析),而其他扩展则让你可以播放音乐或拥有虚拟的 宠物。
大多数扩展程序会代表您运行代码,并可能造成损害。某些扩展程序具有设置,如果配置为运行意外的可执行文件,可能会导致它们恶意行为。因此,在受限模式下,默认情况下会禁用未明确选择加入工作区信任的扩展程序。
您可以通过在工作区信任编辑器中选择扩展被禁用或功能受限链接来查看已安装扩展的状态,该链接会显示使用@workspaceUnsupported
过滤器作用范围的扩展视图。
未选择加入工作区信任的扩展可以在受限模式下被禁用或限制。
在受限模式下禁用
未明确表示支持在受限模式下运行的扩展将显示在受限模式下禁用部分。扩展作者还可以表示,如果他们确定其扩展可能被工作区中的修改(设置或文件)滥用,则他们永远不希望启用受限模式。
受限模式下的限制
扩展作者还可以评估其扩展是否存在潜在的安全漏洞,并声明在受限模式下运行时提供有限支持。此模式意味着扩展可能会禁用某些功能或特性,以防止可能的漏洞利用。
扩展可以在扩展视图中向工作区信任徽章添加自定义文本,解释在不受信任的文件夹中运行时的限制。例如,VS Code 内置的 PHP 扩展限制了在不受信任的文件夹中使用 php.validate.executablePath 设置,因为覆盖此设置可能会运行恶意程序。
您可以使用extensions.supportUntrustedWorkspaces设置来覆盖扩展的工作区信任支持级别,该设置在下面的启用扩展部分中有描述。
如果您尝试在受限模式下安装扩展,系统会提示您信任工作区或仅安装扩展。如果扩展不支持工作区信任,它将被安装,但会被禁用或以有限功能运行。
注意: 扩展作者可以通过阅读Workspace Trust 扩展指南来学习如何更新他们的扩展以支持工作区信任。
信任工作区
如果您信任项目的作者和维护者,您可以信任本地机器上的项目文件夹。例如,通常可以信任来自知名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
启用扩展
如果你想使用受限模式,但你最喜欢的扩展不支持工作区信任怎么办?如果一个扩展虽然有用且功能齐全,但没有被积极维护,并且没有声明其工作区信任支持,这种情况可能会发生。为了处理这种情况,你可以使用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
属性指定适用的确切扩展版本,如果您想为所有版本设置状态,可以移除版本字段。
如果您想了解更多关于扩展作者如何评估和确定在受限模式下限制哪些功能的信息,您可以阅读Workspace Trust Extension Guide。
打开不受信任的文件
如果您打开一个位于受信任文件夹之外的文件,VS Code 会检测到该文件来自文件夹根目录之外的某个地方,并提示您选择继续打开文件或在受限模式下在新窗口中打开文件。在受限模式下打开是最安全的选择,一旦您确定文件是可信的,您可以随时在原始的 VS Code 窗口中重新打开该文件。
如果您希望在打开来自不受信任工作区的文件时不提示,可以将 security.workspace.trust.untrustedFiles 设置为 open
。您还可以将 security.workspace.trust.untrustedFiles 设置为 newWindow
,以始终在受限模式下创建新窗口。在不受信任文件对话框中勾选 记住我对所有工作区的决定 选项,将您的选择应用于 security.workspace.trust.untrustedFiles 用户设置。
打开不受信任的文件夹
在使用多根工作区处理多个文件夹时,如果您尝试向受信任的多根工作区添加新文件夹,系统会提示您决定是否信任该文件夹中的文件,如果不信任,整个工作区将切换到受限模式。
空窗口(没有打开的文件夹)
默认情况下,如果您打开一个新的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
。
命令行开关
你可以通过在VS Code命令行中传递--disable-workspace-trust
来禁用工作区信任。此开关仅影响当前会话。
下一步
了解更多信息:
- Workspace Trust 扩展指南 - 了解扩展作者如何支持 Workspace Trust。
- 什么是 VS Code 的“工作区”? - 了解更多关于 VS Code“工作区”概念的详细信息。
- GitHub Repositories extension - 直接在仓库上工作,无需将源代码克隆到本地机器。
常见问题
我还能在受限模式下编辑我的源代码吗?
是的,您仍然可以在受限模式下浏览和编辑源代码。某些语言功能可能被禁用,但文本编辑始终受支持。
我安装的扩展程序去哪了?
在受限模式下,任何不支持工作区信任的扩展将被禁用,所有UI元素(如活动栏图标和命令)将不会显示。
您可以使用extensions.supportUntrustedWorkspaces设置来覆盖扩展的工作区信任支持级别,但请谨慎操作。启用扩展部分提供了更多详细信息。
我可以禁用工作区信任功能吗?
你可以这样做,但不推荐。如果你不希望VS Code在打开新文件夹或仓库时检查工作区信任,你可以将security.workspace.trust.enabled设置为false。这样,VS Code将表现得像1.57版本发布之前一样。
如何取消对文件夹/工作区的信任?
打开工作区信任编辑器(从命令面板中选择工作区:管理工作区信任)并选择不信任按钮。您还可以从受信任的文件夹和工作区列表中移除该文件夹。
为什么我看不到“不信任”按钮?
如果您在工作区信任对话框中看不到不信任按钮,文件夹的信任级别可能是从父文件夹继承的。请查看受信任的文件夹和工作区列表,以检查父文件夹是否启用了工作区信任。
一些工作流程,例如连接到GitHub Codespace或附加到正在运行的Docker容器,会自动被信任,因为这些是受管理的环境,您应该已经对其有高度的信任。
Workspace Trust 保护什么?
VS Code 的许多功能允许第三方工具和扩展自动运行,例如保存时的 linting 或格式化,或者在执行某些操作(如编译代码或调试)时运行。不道德的人可能会制作一个看似无害的项目,在你不知情的情况下运行恶意代码,从而损害你的本地机器。工作区信任通过在你评估不熟悉的源代码的安全性和完整性时尝试阻止代码执行,提供了额外的安全层。