工作區信任
Visual Studio Code 非常重視安全性,並希望協助您安全地瀏覽和編輯程式碼,無論來源或原始作者為何。「工作區信任」功能可讓您決定是否可讓 VS Code 和擴充功能執行專案資料夾中的程式碼,而無需您的明確核准。
安全程式碼瀏覽
非常棒的是,在公用存放庫和檔案共用中有如此多的原始碼可用。無論是何種程式碼撰寫工作或問題,可能都已存在可用的良好解決方案。同樣很棒的是,有許多功能強大的程式碼撰寫工具可用來協助您理解、偵錯及最佳化程式碼。但是,使用開放原始碼和工具確實存在風險,而且您可能會讓自己暴露於惡意程式碼執行和漏洞。
「工作區信任」在處理不熟悉的程式碼時,提供額外的安全性層級,方法是在工作區以「受限模式」開啟時,防止自動執行工作區中任何程式碼。
注意:詞彙「工作區」和「資料夾」廣泛用於 VS Code UI 和文件中。您可以將「工作區」視為具有 VS Code 建立和使用的額外中繼資料的資料夾。
受限模式
當「工作區信任」對話方塊提示時,如果您選擇否,我不信任作者,VS Code 會進入「受限模式」以防止程式碼執行。
工作台會在頂端顯示橫幅,其中包含透過「工作區信任」編輯器管理資料夾的連結。在狀態列中,您也可以看到徽章,指出工作區處於「受限模式」。
「受限模式」嘗試透過停用或限制數個 VS Code 功能的運作方式來防止自動程式碼執行:工作、偵錯、工作區設定和擴充功能。
若要查看在「受限模式」中停用的完整功能清單,您可以透過橫幅中的管理連結,或選取狀態列中的「受限模式」徽章來開啟「工作區信任」編輯器。
重要:「工作區信任」無法防止惡意擴充功能執行程式碼並忽略「受限模式」。您應該只安裝和執行來自您信任的知名發行者的擴充功能。
工作
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 中編輯連結以管理擴充功能識別碼及其支援狀態和版本的清單。您可以透過 IntelliSense 建議選取任何已安裝的擴充功能。
您可以在下方看到 Prettier 擴充功能的 settings.json
項目。
"extensions.supportUntrustedWorkspaces": {
"esbenp.prettier-vscode": {
"supported": true,
"version": "6.4.0"
},
},
您可以使用 supported
屬性來啟用或停用「工作區信任」支援。version
屬性會指定適用的確切擴充功能版本,如果您想要設定所有版本的狀態,可以移除 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
。
命令列參數
您可以透過傳遞 --disable-workspace-trust
,經由 VS Code 命令列停用「工作區信任」。此參數只會影響目前的會話。
後續步驟
深入瞭解
- 「工作區信任擴充功能指南」 - 瞭解擴充功能作者如何支援「工作區信任」。
- 什麼是 VS Code「工作區」? - 深入瞭解 VS Code「工作區」概念的詳細資訊。
- GitHub 存放庫擴充功能 - 直接在存放庫上工作,而無需將原始碼複製到本機電腦。
常見問題
我是否仍可在「受限模式」中編輯原始碼?
是,您仍然可以在「受限模式」中瀏覽和編輯原始碼。某些語言功能可能會停用,但始終支援文字編輯。
我安裝的擴充功能到哪裡去了?
在「受限模式」中,任何不支援「工作區信任」的擴充功能都會停用,而且所有 UI 元素 (例如活動列圖示和命令) 都將不會顯示。
您可以使用 extensions.supportUntrustedWorkspaces 設定來覆寫擴充功能的「工作區信任」支援層級,但請謹慎執行。啟用擴充功能中有更多詳細資訊。
我可以停用「工作區信任」功能嗎?
您可以停用,但不建議停用。如果您不希望 VS Code 在開啟新資料夾或存放庫時檢查「工作區信任」,您可以將 security.workspace.trust.enabled 設定為 false。然後,VS Code 的行為會與 1.57 版之前的行為相同。
我要如何取消信任資料夾/工作區?
叫出「工作區信任」編輯器 (從命令面板中選取工作區:管理工作區信任),然後選取不信任按鈕。您也可以從「信任的資料夾與工作區」清單中移除資料夾。
為什麼我看不到「不信任」按鈕?
如果您在「工作區信任」對話方塊中看不到不信任按鈕,則資料夾的信任層級可能是從父資料夾繼承而來。檢閱「信任的資料夾與工作區」清單,以檢查父資料夾是否已啟用「工作區信任」。
某些工作流程 (例如連線到 GitHub Codespace 或附加至執行中的 Docker 容器) 會自動受到信任,因為這些是受管理的環境,您應該已經對其具有高度信任。
「工作區信任」可防止什麼?
VS Code 的許多功能允許協力廠商工具和擴充功能自動執行,例如程式碼檢查或儲存時格式化,或在您執行某些作業 (例如編譯程式碼或偵錯) 時執行。不道德的人可能會精心設計看似無害的專案,這些專案會在您不知情的情況下執行惡意程式碼並損害您的本機電腦。「工作區信任」藉由嘗試在您評估不熟悉原始碼的安全性和完整性時防止程式碼執行,提供額外的安全性層級。