工作區信任
Visual Studio Code 非常重視安全性,並希望協助您無論來源或原始作者為何,都能安全地瀏覽和編輯程式碼。工作區信任功能可讓您決定專案資料夾中的程式碼是否可以在未經您明確核准的情況下,由 VS Code 和擴充功能執行。

安全的程式碼瀏覽
有這麼多原始碼可在公開儲存庫和檔案分享中取得,這很棒。無論是何種編碼任務或問題,可能都已經有很好的解決方案。同時,也有這麼多強大的編碼工具可以協助您理解、偵錯和優化程式碼,這也很棒。然而,使用開放原始碼和工具確實存在風險,您可能會面臨惡意程式碼執行和漏洞利用的風險。
工作區信任在處理不熟悉程式碼時提供了額外的安全層,方法是如果工作區在「受限模式」下開啟,則防止工作區中任何程式碼的自動執行。
「工作區」和「資料夾」這兩個術語在 VS Code 的使用者介面和文件中廣泛使用。您可以將「工作區」視為一個包含 VS Code 建立和使用的額外中繼資料的資料夾。
受限模式
當工作區信任對話框提示時,如果您選擇不,我不信任作者,VS Code 將進入受限模式以防止程式碼執行。
工作台頂部會顯示一個橫幅,其中包含一個連結到透過工作區信任編輯器管理您的資料夾。在狀態列中,您也可以看到一個徽章,指示工作區處於受限模式。

受限模式嘗試透過停用或限制數個 VS Code 功能的運作來防止自動程式碼執行:AI 代理程式、工作、偵錯、工作區設定和擴充功能。
若要查看受限模式中停用的完整功能清單,您可以透過橫幅中的管理連結,或透過選取狀態列中的受限模式徽章來開啟工作區信任編輯器。工作區信任編輯器預設會在編輯器區域上方以互動式重疊視窗開啟。

工作區信任無法阻止惡意擴充功能執行程式碼並忽略受限模式。您應該只安裝和執行來自您信任的知名發行者的擴充功能。
AI 代理程式
當您在 VS Code 中使用 AI 驅動的開發功能(例如代理程式)時,這些代理程式會代表您執行動作,包括修改程式碼庫、執行終端機命令或叫用網路請求。任何檔案都可能透過代理程式被拉入上下文,理論上可能導致提示注入攻擊。
在您審查專案是否存在惡意內容之前,請依賴工作區信任邊界並在受限模式下開啟它。在受限模式下開啟工作區會停用該工作區中的代理程式。
若要進一步了解在 VS Code 中使用 AI 驅動的開發功能時的AI 安全考量。
工作 (Tasks)
VS Code 工作可以執行指令碼和工具二進位檔。由於工作定義在工作區的.vscode資料夾中定義,因此它們是儲存庫已提交原始碼的一部分,並分享給該儲存庫的每個使用者。如果有人建立惡意工作,任何複製該儲存庫的人都可能在不知情的情況下執行它。
如果您在受限模式下嘗試執行甚至列舉工作 (工作 > 執行工作),VS Code 會顯示提示以確認您信任該資料夾並可以繼續執行該工作。如果您取消對話框,VS Code 將保持在受限模式。

偵錯
與執行 VS Code 工作類似,偵錯擴充功能可以在啟動偵錯工作階段時執行偵錯程式二進位檔。因此,當資料夾在受限模式下開啟時,偵錯也會被停用。
如果您在受限模式下嘗試啟動偵錯工作階段 (偵錯 > 啟動偵錯),VS Code 會顯示提示以確認您信任該資料夾並可以繼續啟動偵錯程式。如果您取消對話框,VS Code 將保持在受限模式,並且不會啟動偵錯工作階段。

工作區設定
工作區設定儲存在工作區根目錄的.vscode資料夾中,因此會分享給任何複製工作區儲存庫的人。某些設定包含執行檔的路徑(例如,linter 二進位檔),如果設定指向惡意程式碼,可能會造成損害。因此,VS Code 在受限模式下執行時會停用一組工作區設定。

在工作區信任編輯器中,選取未套用的工作區設定連結,以顯示透過@tag:requireTrustedWorkspace標籤篩選的設定編輯器。

延伸模組
VS Code 擴充功能生態系統極其豐富和多樣化。人們已經創建了擴充功能來協助幾乎任何程式設計任務或編輯器自訂。一些擴充功能提供完整的程式語言支援(IntelliSense、偵錯、程式碼分析),而另一些則讓您播放音樂或擁有虛擬寵物。
大多數擴充功能都會代表您執行程式碼,並可能造成損害。有些擴充功能具有設定,如果設定為執行非預期的執行檔,可能會惡意行動。因此,預設情況下,尚未明確選擇加入工作區信任的擴充功能在受限模式中是停用的。

您可以透過選取工作區信任編輯器中的擴充功能已停用或功能受限連結來檢閱已安裝擴充功能的狀態,這會顯示透過@workspaceUnsupported篩選器篩選的擴充功能檢視。

未選擇加入工作區信任的擴充功能在受限模式下可能會被停用或功能受限。
在受限模式下停用
未明確指出其支援在受限模式下執行的擴充功能會顯示在在受限模式下停用區段中。擴充功能作者也可以指出,如果他們判斷其擴充功能可能被工作區中的修改(設定或檔案)濫用,他們絕不希望在受限模式下啟用。
在受限模式下功能受限
擴充功能作者還可以評估其擴充功能是否存在可能的安全漏洞,並聲明它們在受限模式下執行時具有受限支援。此模式表示擴充功能可能會停用某些功能或特性以防止可能的漏洞利用。
擴充功能可以將自訂文字新增到擴充功能檢視中的工作區信任徽章,解釋在不信任的資料夾中執行時的限制。例如,VS Code 內建的 PHP 擴充功能將 php.validate.executablePath 設定的使用限制在受信任的資料夾,因為覆寫此設定可能會執行惡意程式。

您可以使用下方啟用擴充功能區段中描述的 extensions.supportUntrustedWorkspaces 設定來覆寫擴充功能的工作區信任支援等級。
如果您嘗試在受限模式下安裝擴充功能,系統會提示您信任工作區或僅安裝擴充功能。如果擴充功能不支援工作區信任,它會被安裝,但會停用或以受限功能執行。

擴充功能作者可以閱讀工作區信任擴充功能指南,了解如何更新其擴充功能以支援工作區信任。
信任工作區
如果您信任專案的作者和維護者,您可以信任您本機電腦上的專案資料夾。例如,信任來自知名 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屬性指定適用的確切擴充功能版本,如果您想為所有版本設定狀態,可以移除版本欄位。
如果您想進一步了解擴充功能作者如何評估和決定在受限模式下限制哪些功能,您可以閱讀工作區信任擴充功能指南。
開啟不信任的檔案
如果您開啟的檔案位於受信任資料夾之外,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來停用工作區信任。此參數僅影響目前工作階段。
後續步驟
了解更多資訊
- 工作區信任擴充功能指南 - 了解擴充功能作者如何支援工作區信任。
- 什麼是 VS Code「工作區」? - 了解有關 VS Code「工作區」概念的更多詳細資訊。
- GitHub 儲存庫擴充功能 - 直接在儲存庫上工作,而無需將原始碼複製到您的本機電腦。
常見問題
我仍然可以在受限模式下編輯原始碼嗎?
是的,您仍然可以在受限模式下瀏覽和編輯原始碼。某些語言功能可能會停用,但文字編輯始終受支援。
我安裝的擴充功能去哪了?
在受限模式下,任何不支援工作區信任的擴充功能都將被停用,並且所有使用者介面元素,例如活動列圖示和命令,將不會顯示。
您可以使用 extensions.supportUntrustedWorkspaces 設定來覆寫擴充功能的工作區信任支援等級,但請務必小心。啟用擴充功能有更多詳細資訊。
我可以停用工作區信任功能嗎?
可以,但不建議這麼做。如果您不希望 VS Code 在開啟新資料夾或儲存庫時檢查工作區信任,您可以將 security.workspace.trust.enabled 設定為 false。VS Code 隨後將表現得如同 1.57 版發行之前一樣。
如何取消信任資料夾/工作區?
開啟工作區信任編輯器 (從命令選擇區中選取工作區:管理工作區信任),然後選取不信任按鈕。您也可以從信任的資料夾與工作區清單中移除資料夾。
為什麼我看不到「不信任」按鈕?
如果您在工作區信任對話框中看不到不信任按鈕,該資料夾的信任等級可能是從父資料夾繼承而來。檢閱信任的資料夾與工作區清單,檢查父資料夾是否已啟用工作區信任。
某些工作流程,例如連線到GitHub Codespace或附加到執行中的 Docker 容器,會自動受信任,因為這些是您應該已經高度信任的受管理環境。
工作區信任能防範什麼?
VS Code 的許多功能允許第三方工具和擴充功能自動執行,例如儲存時的程式碼檢查或格式化,或者當您執行某些操作(例如編譯程式碼或偵錯)時。不道德的人可能會製作一個看似無害的專案,在您不知情的情況下執行惡意程式碼,損害您的本機電腦。工作區信任透過在您評估不熟悉原始碼的安全性和完整性時,嘗試防止程式碼執行,提供額外的安全層。