工作區信任
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
資料夾中,因此會由任何複製工作區存放庫的人員共用。某些設定包含可執行檔的路徑 (例如,程式碼檢查工具二進位檔),如果設定為指向惡意程式碼,可能會造成損害。基於這個原因,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
屬性會指定適用的確切擴充功能版本,如果您想要為所有版本設定狀態,則可以移除版本欄位。
如果您想要深入了解擴充功能作者如何評估和判斷要在「受限模式」中限制哪些功能,您可以閱讀「工作區信任擴充功能指南」。
開啟不受信任的檔案
如果您開啟位於受信任資料夾外部的檔案,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 的許多功能允許協力廠商工具和擴充功能自動執行,例如程式碼檢查或儲存時格式化,或當您執行某些作業 (例如編譯程式碼或偵錯) 時。「不道德」的人可能會製作看起來無害的專案,這些專案會在您不知情的情況下執行惡意程式碼並損害您的本機電腦。「工作區信任」提供額外的安全性層級,方法是在您評估不熟悉原始碼的安全性與完整性時,嘗試防止程式碼執行。