Live Share 的安全性功能

Visual Studio Live Share中的共同作業會話功能強大,可讓任意數目的人員加入會話,並共同編輯、偵錯等等。 不過,基於此層級的存取權,您會對 Live Share 提供的安全性功能感興趣。 在本文中,我們將提供一些建議和選項,以視需要保護您的環境。

如同任何共同作業工具,請記住,您應該只與您信任的人員共用程式碼、內容和應用程式。

連線能力

在對等之間起始會話時,Live Share 會嘗試建立對等連線,而且只有在因為防火牆/NAT) 而 (無法建立對等連線時,才會使用雲端轉送。 不過,在這兩種連線類型中 (P2P 或轉送) ,在對等之間傳輸的所有資料都會使用 SSH 通訊協定進行端對端加密。 在轉接連線的情況下,SSH 加密會分層在 TLS 加密的 WebSocket 之上。 這表示 Live Share 不相依于雲端轉寄服務的安全性。 即使轉寄遭到入侵,也無法解密任何 Live Share 通訊。

Live Share 服務的角色僅限於使用者驗證和會話探索。 服務本身不會儲存或曾存取會話的任何內容。 Live Share 中的所有使用者內容都會透過 SSH 會話傳輸。 這包括程式碼、終端機、共用伺服器,以及 Live Share 所提供的任何其他共同作業功能,或建置在它上的擴充功能。

若要深入瞭解如何改變這些行為和 Live Share 的連線需求,請參閱 Live Share 的連線需求

網路加密

SSH 通訊協定會使用Diffie-Hellman金鑰交換來建立會話的共用密碼,並衍生自該金鑰以進行 AES 對稱加密。 加密金鑰會在會話期間定期輪替。 共用會話秘密和所有加密金鑰只會由兩端在記憶體中維護,而且只在會話期間有效。 它們永遠不會寫入磁片或傳送至任何服務, (包括 Live Share) 。

對等驗證

SSH 會話也是雙向驗證的。 主機 (SSH 伺服器角色) 使用公用/私密金鑰驗證,如同 SSH 通訊協定的標準。 當主機共用 Live Share 會話時,它會為會話產生唯一的 RSA 公開/私密金鑰組。 主機私密金鑰只會保留在主機進程中的記憶體中;它永遠不會寫入磁片,或傳送至任何服務,包括 Live Share 服務。 主機公開金鑰會發佈至 Live Share 服務,以及會話連線資訊 (IP 位址和/或轉寄端點,) 來賓可透過邀請連結存取它。 當來賓連線到主機的 SSH 會話時,客體會使用 SSH 主機驗證通訊協定來驗證主機是否持有對應至已發佈公開金鑰的私密金鑰 (,而不需要來賓實際看到私密金鑰) 。

來賓會使用 Live Share 權杖向主機驗證自己。 權杖是由 Live Share 服務所簽發的已簽署 JWT,其中包含透過 MSA、AAD 或 GitHub 登入) 取得之使用者身分識別 (宣告。 權杖也有宣告,指出來賓能夠存取該特定 Live Share 會話 (,因為其具有邀請連結,以及/或主機特別邀請) 。 主機會驗證權杖並檢查宣告 (,而且視選項而定,在允許來賓加入會話之前,可能會提示主機使用者) 。

邀請和加入存取權

每次啟動新的共同作業會話時,Live Share 都會產生 新的唯一識別碼 ,該識別碼會放在邀請連結中。 這些連結提供穩固且安全的基礎,以邀請您信任的專案,因為連結中的識別碼是「不可猜測」, 而且只在單一共同作業會話期間有效

移除非預期的來賓

身為主機,每當來賓加入共同作業會話時,您就會自動收到通知。

在 Visual Studio Code:

Visual Studio Code加入通知

在 Visual Studio 中:

Visual Studio 加入通知

更棒的是,如果基於某些原因您不知道來賓,通知可讓您移除已加入的來賓。 (例如,如果您不小心在全公司聊天系統上張貼您的連結,並加入隨機員工。) 只要按一下出現的通知中的 [移除] 按鈕,就會退出共同作業會話。

VS Code中,即使您已關閉加入通知,也能夠移除參與者。 藉由在 [總管] 或 VS Code 活動列中的 [自訂] 索引標籤中開啟 Live Share 檢視,您可以將滑鼠停留在參與者的名稱上或按一下滑鼠右鍵,然後選取 [移除參與者] 圖示或選項。

移除 VS Code 中的參與者

需要來賓核准

一般而言,加入共同作業會話的參與者將會使用 Microsoft 公司或學校帳戶登入 Live Share , (AAD) 、個人 Microsoft 帳戶或 GitHub 帳戶。 雖然已登入使用者的「通知 + 移除」預設會為這些來賓提供良好的速度和控制,但如果您正在執行一些敏感性動作,您可能會想要 鎖定 更多專案。

此外,在某些情況下,強制所有來賓登入加入共同作業會話可能會有問題。 範例包括要求新使用者 Live Share 加入為來賓、教室/學習案例,或與沒有其中一個支援帳戶類型的人員共同作業時。 基於這些原因,Live Share 可讓使用者 未登入唯讀 來賓身分加入共同作業會話。 雖然主機必須 核准 這些來賓,才能預設加入,但您可能想要不允許這些「匿名」來賓,或一律核准這些來賓。

要求已登入使用者的來賓核准

如果您想要防止登入來賓加入共同作業會話,直到您「核准」,請變更下列設定:

  • VS Code中,將下列內容新增至 settings.json (檔案 > 喜好 > 設定) :

    "liveshare.guestApprovalRequired": true
    
  • Visual Studio中,將 [工具 > 選項 > 即時共用 > ] [需要來賓核准] 設定為 True。

    醒目提示來賓核准設定的 Visual Studio 設定視窗

此時,系統會要求您核准每個加入的來賓。

在 Visual Studio Code:

Visual Studio Code 加入核准要求

在 Visual Studio 中:

Visual Studio 加入核准要求

身為來賓,如果您加入已啟用此設定的會話,您會在狀態列或加入對話方塊中收到通知,指出 Live Share 正在等候主機核准。

自動拒絕或接受未登入的使用者 (匿名)

如上所述,Live Share 可以設定為允許使用者未以唯讀來賓身分登入共同作業會話。 雖然這些 「匿名」來賓必須在加入時輸入名稱 ,但簡單名稱不會提供與實際登入相同的保證層級。 因此, 根據預設,系統會提示主機核准 任何匿名來賓,而不論上述的「需要來賓核准」設定為何。

一律可以拒絕 (停用匿名來賓) 或 一律接受 匿名使用者,如下所示:

  • VS Code中,設定 liveshare.anonymousGuestApproval settings.json ([檔案 > 喜好 > 設定]) 為 acceptrejectprompt 視需要 (預設) 。

  • Visual Studio中,將 [工具 > 選項 > 即時共用 > ] [匿名來賓核准] 設定為 [接受]、[拒絕] 或 [提示] (適當的預設) 。

不論為何,請記住,您應該只傳送 Live Share 邀請連結給您信任的人員。

控制檔案存取和可見度

作為來賓,Live Share 的遠端模型可讓您快速讀取/寫入主機與您共用的檔案和資料夾,而不需要同步處理專案的整個內容。 因此,您可以獨立流覽和編輯整個共用檔案樹狀結構中的檔案。 不過,這種自由會對主機造成一些風險。 在概念上,開發人員可以選擇不了解並修改原始程式碼,或看到位於共用檔案樹狀結構某處的敏感性原始程式碼或「秘密」。 因此,身為主機,您可能不一定會希望來賓能夠存取您共用之整個專案。 同樣地,此遠端模型的新增優點是,您可以選擇「排除」不想要與任何人共用的檔案,而不需要犧牲功能。 如果您的來賓仍可以參與偵錯會話之類的專案,如果他們想要自行執行,通常需要存取這些檔案。

您可以將 .vsls.json 檔案新增至您要共用的資料夾或專案來完成此作業。 您新增至此 json 格式檔案的任何設定都會變更 Live Share 處理檔案的方式。 除了提供直接控制之外,這些檔案也可以認可原始檔控制,讓任何複製專案的人都能利用這些規則,而不需要額外的心力。

以下是 .vsls.json 檔案範例:

{
    "$schema": "http://json.schemastore.org/vsls",
    "gitignore":"none",
    "excludeFiles":[
        "*.p12",
        "*.cer",
        "token",
        ".gitignore"
    ],
    "hideFiles": [
        "bin",
        "obj"
    ]
}

注意

您也可以在您啟動共同作業會話時,將共用的所有檔案/資料夾設為 唯讀 。 如需詳細資訊,請參閱 下方

讓我們逐步解說這些屬性如何變更來賓可以執行的動作。

屬性

excludeFiles屬性可讓您指定 glob 檔案模式的清單, (非常像找到的 .gitignore 檔案) ,以防止 Live Share 開啟來賓的特定檔案或資料夾。 請注意,這包括來賓 追蹤或跳到編輯位置、在共同作業偵錯期間逐步執行檔案、任何程式碼流覽功能等案例,例如移至定義等等。 它適用于您從未想要在任何情況下共用的檔案,例如包含秘密、憑證或密碼的檔案。 例如,由於它們控制安全性,所以一律會排除 .vsls.json 檔案。

hideFiles屬性很類似,但不完全嚴格。 這些檔案只會隱藏在檔案樹狀結構中。 例如,如果您在偵錯期間遇到其中一個檔案,它仍會在編輯器中開啟。 如果您沒有 .gitignore 檔案設定 (,則此屬性主要很有用,就像您使用不同的原始檔控制系統) ,或只是想要增強已經存在的內容,以避免雜亂或混淆。

gitignore設定會建立 Live Share 如何處理共用資料夾中 .gitignore 檔案的內容。 根據預設,在 .gitignore 檔案中找到的任何 glob 都會被視為在 「hideFiles」 屬性中指定。 不過,您可以使用下列其中一個值來選擇不同的行為:

選項 結果
none 檔案樹狀結構中的來賓可以看到 .gitignore 內容, (假設它們不是由來賓編輯器設定篩選) 。
hide 預設值。 .gitignore 內的 Glob 會像在 「hideFiles」 屬性中一樣進行處理。
exclude .gitignore 內的 Globs 會像在 「excludeFiles」 屬性中一樣進行處理。

設定的 exclude 缺點是node_modules等資料夾的內容經常在 .gitignore 中,但在偵錯期間可能很有用。 因此,Live Share 支援在 excludeFiles 屬性中使用 「!」 來反轉規則的能力。 例如,這個 .vsls.json 檔案會排除 「.gitignore」 中的所有專案,但node_modules除外:

{
    "$schema": "http://json.schemastore.org/vsls",
    "gitignore":"exclude",
    "excludeFiles":[
        "!node_modules"
    ]
}

隱藏和排除規則會分開處理,因此,如果您仍想要隱藏node_modules以減少雜亂,而不實際排除它,您可以直接編輯檔案,如下所示:

{
    "$schema": "http://json.schemastore.org/vsls",
    "gitignore":"exclude",
    "excludeFiles":[
        "!node_modules"
    ],
    "hideFiles":[
        "node_modules"
    ]
}

子資料夾中的 .vsls.json 檔案

最後,就像 .gitignore 一樣,.vsls.json 檔案可以放在子資料夾中。 隱藏/排除規則取決於從您共用根資料夾中的 .vsls.json 檔案開始,如果存在 () ,然後從該處逐步執行每個子資料夾,然後從該處流覽,以尋找要處理的 .vsls.json 檔案。 在檔案樹狀結構較遠的資料夾中,.vsls.json 檔案的內容會補充 (或覆寫在較高層級建立的) 規則。

注意:如果排除該檔案的父目錄,則無法重新包含 (!) 檔案。 類似于 .gitignore,在重新包含檔案時,您也需要重新包含檔案的每個父目錄。

停用外部檔案共用

根據預設,Live Share 也會共用主機開啟的任何檔案,這些檔案位於共用資料夾/解決方案外部。 這可讓您輕鬆地快速開啟其他相關檔案,而不需要重新共用。

如果您想要停用此功能:

  • VS Code中,將下列內容新增至 settings.json:

    "liveshare.shareExternalFiles": false
    
  • Visual Studio中,將 [工具 > 選項 > 即時共用 > ] [共用外部檔案] 設定為 False

唯讀模式

有時候當您將程式碼共用為主機時,您不希望來賓進行編輯。 您可能需要來賓查看部分程式碼,或向大量來賓顯示您的專案,而且不想要進行任何不必要的或意外的編輯。 Live Share 提供在唯讀模式中共用專案的能力。

身為主機,共用時,您可以選擇啟用共同作業會話的唯讀模式。 當來賓加入時,他們將無法對程式碼進行編輯,不過您仍然可以看到彼此的游標和醒目提示,以及流覽專案。

在唯讀模式中,您仍然可以與來賓共同偵錯。 來賓無法逐步執行偵錯程式,但仍可以新增或移除中斷點,以及檢查變數。 此外,您仍然可以與來賓共用 (唯讀) 的伺服器和終端機。

您可以深入瞭解如何啟動唯讀共同作業會話: VS CodeVS

共同偵錯

當您解決難以撰寫程式碼問題或 Bug 時,在偵錯時有一對額外的眼睛可能非常實用。 Visual Studio Live Share只要主機開始偵錯,就會與所有來賓共用偵錯會話,以啟用「共同偵錯」或「共同偵錯」。

身為主機,當您與不信任的某人共用時,偵錯會話啟動或停止時,您會完全控制偵錯,但共同偵錯會造成一些風險。 Live Share 可讓您邀請來賓執行主控台/REPL 命令,因此執行 您不想執行命令的惡意執行者有風險

因此,您應該 只與信任的人員共同偵錯。

深入瞭解: VS CodeVS

共用本機伺服器

共同偵錯時,能夠存取主持人針對偵錯工作階段所提供的不同應用程式連接埠會非常有用。 您可能想要在瀏覽器中存取應用程式、存取本機資料庫,或從您的工具叫用 REST 端點。 Live Share 可讓您「共用伺服器」,將主機電腦上的本機埠對應至客體電腦上的相同埠。 身為來賓,您接著可以與應用程式互動,就像在機器本機執行一樣, (例如主機和來賓可以存取在上執行的 Web 應用程式 http://localhost:3000).

不過,身為主機,您應該 非常選擇性地使用您與來賓共用的埠 ,而只共用應用程式埠,而不是系統埠。 對於來賓,共用連接埠的行為就如同該伺服器/服務是在他們自己的機器上執行。 這非常有用,但如果共用不適當的連接埠,也可能有風險。 基於這個理由,Live Share 不會假設應該或不應該在設定設定和主機執行動作的情況下共用哪些內容。

在 Visual Studio 中,ASP.NET 專案中指定的Web 應用程式埠會在偵錯期間自動共用,以在執行時協助來賓存取 Web 應用程式。 不過,如果您想要的話,您可以將 [工具 > 選項 > 即時共用][共用 Web 應用程式在偵錯時共用 > ] 設定為 [False] 來關閉此自動化。

在Visual Studio Code中,Live Share 會嘗試偵測適當的應用程式埠並加以共用。 不過,您可以將下列內容新增至 settings.json 來停用此功能:

"liveshare.autoShareServers": false

在任一情況下,共用其他埠時,請小心。

您可以在這裡深入瞭解如何設定功能: VS CodeVS

共用終端機

新式開發經常會運用各種命令列工具。 幸運的是,Live Share 可讓身為主持人的您選擇與來賓「共用終端機」。 共用的終端機可以是唯讀或完全共同作業,因此您和您的來賓都能執行命令並看到結果。 身為主機,您可以允許其他共同作業者只查看輸出,或使用任意數目的命令列工具來執行測試、建置或甚至分級環境特定問題。

只有主機可以啟動共用終端機,以防止來賓啟動一個終端機,並執行您不預期或監看的內容。 當您以主機身分啟動共用終端機時,可以指定它應該是唯讀還是可讀寫的。 當終端機是讀取/寫入時,包括主持人在內的每個人都可以在終端機中輸入,這樣當來賓在進行您不希望的操作時,您輕鬆就能介入。 不過,為了安全起見,您應該只在確定來賓確實需要讀取/寫入存取權時才提供此權限,並在您只想要來賓查看您執行之任何命令的輸出時提供唯讀終端機。

在 Visual Studio 中,預設不會共用終端機。 在 VS Code 中,終端機預設會自動共用 唯讀 。 不過,您可以將下列內容新增至 settings.json 來停用此功能:

"liveshare.autoShareTerminals": false

深入瞭解: VS CodeVS

使用 Microsoft 支援 的工作或學校電子郵件地址 登入時,您可能會在登入時看到訊息指出 「需要系統管理員核准」 。 這是因為 Live Share 需要使用者資訊的讀取權限,才能取得其安全性功能,而您的 Azure AD 租使用者已設定為需要「系統管理員同意」,才能存取目錄內容的新應用程式。

您的 AD 系統管理員必須使用下列資訊為您解決此問題:

這只需要為使用 Live Share 的任何人完成一次。 如需詳細資訊,請參閱這裡和這裡

另請參閱

有問題嗎? 請參閱疑難排解提供意見反應