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