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