チュートリアル:VS Code Go を使用して脆弱な依存関係を見つけて修正する

Go セキュリティに戻る

Visual Studio Code の Go 拡張機能を使用すると、エディターから直接コードの脆弱性をスキャンできます。

注:下記の画像に含まれる脆弱性修正の説明については、govulncheck チュートリアルを参照してください。

前提条件

VS Code Go を使用して脆弱性をスキャンする方法

ステップ 1。「Go: Vulncheck の切り替え」を実行します

Vulncheck の切り替えコマンドは、モジュールにリストされているすべての依存関係の脆弱性分析を表示します。このコマンドを使用するには、IDE のコマンドパレット(Linux/Windows では Ctrl+Shift+P、Mac OS では Cmd+Shift+P)を開き、「Go: 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 のコードアクションは電球アイコンで示されます。関連する依存関係の上にカーソルを合わせると、脆弱性に関する情報が表示され、「クイック修正」を選択すると、オプションのメニューが表示されます。その中から「govulncheck を実行して検証する」を選択します。これにより、ターミナルに関連する govulncheck 出力が返されます。

govulncheck code action
VS Code Go govulncheck output

ステップ 3。go.mod ファイルにリストされている依存関係の上にカーソルを合わせます。

特定の依存関係に関する関連する govulncheck 出力は、go.mod ファイルの依存関係の上にカーソルを合わせることで確認することもできます。依存関係の情報にすばやくアクセスするには、このオプションはコードアクションを使用するよりも効率的です。

Hover over dependency for vulnerability information

ステップ 4。依存関係の「修正済み」バージョンにアップグレードします。

コードアクションを使用して、脆弱性が修正された依存関係のバージョンにすばやくアップグレードすることもできます。コードアクションのドロップダウンメニューで「アップグレード」オプションを選択します。

Upgrade to Latest via code action menu

追加のリソース