教程:使用 VS Code Go 查詢並修復易受攻擊的依賴項

返回 Go 安全

您可以使用適用於 Visual Studio Code 的 Go 擴充套件直接在編輯器中掃描程式碼是否存在漏洞。

注意:有關下面圖片中包含的漏洞修復的說明,請參閱 govulncheck 教程

先決條件

  • Go。我們建議使用最新版本的 Go 來學習本教程。有關安裝說明,請參閱 安裝 Go
  • VS Code,更新到最新版本。在此下載。您也可以使用 Vim(詳見 此處),但本教程主要關注 VS Code Go。
  • VS Code Go 擴充套件,可 在此下載
  • 特定於編輯器的設定更改。您需要根據 這些規範 修改您的 IDE 設定,然後才能重現以下結果。

如何使用 VS Code Go 掃描漏洞

第 1 步。執行“Go: Toggle Vulncheck”

Toggle Vulncheck 命令顯示模組中列出的所有依賴項的漏洞分析。要使用此命令,請在 IDE 中開啟命令面板(Linux/Windows 上為 Ctrl+Shift+P,Mac OS 上為 Cmd+Shift+P),然後執行“Go: Toggle Vulncheck”。在您的 go.mod 檔案中,您將看到程式碼中直接和間接使用的易受攻擊依賴項的診斷資訊。

Run Toggle Vulncheck

注意:要在您自己的編輯器中重現本教程,請將以下程式碼複製到您的 main.go 檔案中。

// This program takes language tags as command-line
// arguments and parses them.

package main

import (
  "fmt"
  "os"

  "golang.org/x/text/language"
)

func main() {
  for _, arg := range os.Args[1:] {
    tag, err := language.Parse(arg)
    if err != nil {
      fmt.Printf("%s: error: %v\n", arg, err)
    } else if tag == language.Und {
      fmt.Printf("%s: undefined\n", arg)
    } else {
      fmt.Printf("%s: tag %s\n", arg, tag)
    }
  }
}

然後,確保程式對應的 go.mod 檔案如下所示

module module1

go 1.18

require golang.org/x/text v0.3.5

現在,執行 go mod tidy 以確保您的 go.sum 檔案已更新。

第 2 步。透過程式碼操作執行 govulncheck。

使用程式碼操作執行 govulncheck 允許您專注於程式碼中實際呼叫的依賴項。VS Code 中的程式碼操作用燈泡圖示標記;將滑鼠懸停在相關依賴項上以檢視有關漏洞的資訊,然後選擇“Quick Fix”以顯示選項選單。其中,選擇“run govulncheck to verify”。這將在您的終端中返回相關的 govulncheck 輸出。

govulncheck code action
VS Code Go govulncheck output

第 3 步。將滑鼠懸停在 go.mod 檔案中列出的依賴項上。

有關特定依賴項的相關 govulncheck 輸出也可以透過將滑鼠懸停在 go.mod 檔案中的依賴項上來找到。對於快速檢視依賴項資訊,此選項甚至比使用程式碼操作更有效。

Hover over dependency for vulnerability information

第 4 步。升級到依賴項的“fixed in”版本。

程式碼操作還可以用於快速升級到依賴項的漏洞已修復的版本。透過在程式碼操作下拉選單中選擇“Upgrade”選項來完成此操作。

Upgrade to Latest via code action menu

其他資源

  • 有關 IDE 中漏洞掃描的更多資訊,請參閱此頁面“註釋和注意事項”部分特別討論了漏洞掃描可能比上述示例更復雜的特殊情況。
  • Go 漏洞資料庫除了 Go 包維護者直接向 Go 安全團隊報告的資訊外,還包含來自許多現有來源的資訊。
  • 請參閱Go 漏洞管理頁面,它提供了 Go 用於檢測、報告和管理漏洞的架構的高階檢視。