チュートリアル:VS Code Go を使用して脆弱な依存関係を見つけて修正する
Visual Studio Code の Go 拡張機能を使用すると、エディターから直接コードの脆弱性をスキャンできます。
注:下記の画像に含まれる脆弱性修正の説明については、govulncheck チュートリアルを参照してください。
前提条件¶
- Go。このチュートリアルに従うには、最新の Go バージョンを使用することをお勧めします。インストール手順については、Go のインストールを参照してください。
- 最新バージョンに更新されたVS Code。こちらからダウンロード。Vim を使用することもできます(詳細についてはこちらを参照)が、このチュートリアルは VS Code Go に焦点を当てています。
- VS Code Go 拡張機能は、こちらからダウンロードできます。
- エディター固有の設定変更。下記の結果を再現するには、これらの仕様に従って IDE の設定を変更する必要があります。
VS Code Go を使用して脆弱性をスキャンする方法¶
ステップ 1。「Go: Vulncheck の切り替え」を実行します
Vulncheck の切り替えコマンドは、モジュールにリストされているすべての依存関係の脆弱性分析を表示します。このコマンドを使用するには、IDE のコマンドパレット(Linux/Windows では Ctrl+Shift+P、Mac OS では Cmd+Shift+P)を開き、「Go: Vulncheck の切り替え」を実行します。go.mod ファイルには、コードで直接的および間接的に使用されている脆弱な依存関係に関する診断が表示されます。

注:このチュートリアルを独自のエディターで再現するには、以下のコードを 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 出力が返されます。


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

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

追加のリソース¶
- IDE での脆弱性スキャンに関する詳細については、このページを参照してください。特に「注記と警告」セクションでは、脆弱性スキャンが上記の例よりも複雑になる可能性のある特別なケースについて説明しています。
- Go 脆弱性データベースには、Go パッケージのメンテナーからの Go セキュリティチームへの直接の報告に加えて、多くの既存の情報源からの情報が含まれています。
- Go 脆弱性管理ページでは、脆弱性の検出、報告、管理のための Go のアーキテクチャの概要を示しています。