IDEでの脆弱性スキャン
Go言語サーバーと統合されたエディター(Go拡張機能がインストールされたVS Codeなど)は、依存関係の脆弱性を検出できます。
依存関係の脆弱性を検出するには、2つのモードがあります。どちらもGo脆弱性データベースに基づいており、互いに補完し合います。
- インポートベースの分析:このモードでは、エディターはワークスペースでインポートされたパッケージのセットをスキャンして脆弱性を報告し、その結果を`go.mod`ファイル内の診断として表示します。これは高速ですが、脆弱なシンボルを含むパッケージをコードがインポートしているものの、脆弱性のある関数が到達不可能である場合に誤検出を報告する可能性があります。このモードは、`"vulncheck": "Imports"` gopls設定で有効にできます。
- `Govulncheck`分析:これは、`gopls`に組み込まれている`govulncheck`コマンドラインツールに基づいています。これにより、コードが実際に脆弱な関数を呼び出しているかどうかを確認する、ノイズの少ない信頼性の高い方法が提供されます。この分析は計算コストが高くなる可能性があるため、インポートベースの分析からの診断レポートに関連付けられた「Govulncheckを実行して検証」コードアクションを使用するか、`go.mod`ファイル上の`"codelenses.run_govulncheck"`コードレンズを使用することで、手動でトリガーする必要があります。
Go: Vulncheckを切り替える (vulncheck.mp4)
これらの機能は`gopls` v0.11.0以降で利用できます。フィードバックはgo.dev/s/vsc-vulncheck-feedbackまでお寄せください。
エディター固有の指示
VS Code
Go拡張機能はgoplsとの統合を提供します。脆弱性スキャン機能を有効にするには、以下の設定が必要です。
"go.diagnostic.vulncheck": "Imports", // enable the imports-based analysis by default.
"gopls": {
"ui.codelenses": {
"run_govulncheck": true // "Run govulncheck" code lens on go.mod file.
}
}
現在のワークスペースでインポートベースの分析をオン/オフにするには、「Go Toggle Vulncheck」コマンドを使用できます。
Vim/NeoVim
coc.nvimを使用している場合、以下の設定でインポートベースの分析が有効になります。
{
"codeLens.enable": true,
"languageserver": {
"go": {
"command": "gopls",
...
"initializationOptions": {
"vulncheck": "Imports",
}
}
}
}
注意と警告
- この拡張機能はプライベートパッケージをスキャンしたり、プライベートモジュールに関する情報を送信したりしません。すべての分析は、Go脆弱性データベースから既知の脆弱なモジュールのリストをプルし、ローカルで交差を計算することによって行われます。
- インポートベースの分析は、ワークスペースモジュール内のパッケージリストを使用します。`go.work`やモジュールの`replace`/`exclude`が使用されている場合、`go.mod`ファイルから見えるものとは異なる場合があります。
- コードを修正したり、Go脆弱性データベースが更新されたりすると、govulncheck分析結果が古くなる可能性があります。分析結果を手動で無効にするには、`go.mod`ファイルの上部に表示される`"Reset go.mod diagnostics"`コードレンズを使用します。それ以外の場合、結果は1時間後に自動的に無効化されます。
- これらの機能は現在、標準ライブラリやツールチェーンの脆弱性は報告しません。現在、結果をどこに表示し、ユーザーが問題を解決するのをどのように支援するかについて、UXを調査中です。