IDE 中的漏洞掃描
與 Go 語言伺服器 整合的編輯器,例如 安裝了 Go 擴充功能的 VS Code,可以偵測相依項中的漏洞。
偵測相依項中漏洞有兩種模式。兩種模式都由 Go 漏洞資料庫 支援,並且相輔相成。
- 基於匯入的分析:在此模式中,編輯器會透過掃描工作區中匯入的套件組來回報漏洞,並將結果顯示為
go.mod
檔案中的診斷。此方法速度很快,但如果你的程式碼匯入了包含有漏洞符號的套件,但有漏洞的函式無法存取,則可能會回報錯誤的正向結果。此模式可透過"vulncheck": "Imports"
gopls 設定來啟用。 Govulncheck
分析:此分析基於govulncheck
命令列工具,此工具已內嵌於gopls
中。此工具提供一種低雜訊、可靠的方式來確認你的程式碼是否實際呼叫有漏洞的函式。由於此分析的運算成本可能很高,因此必須使用與基於匯入的分析診斷報告相關聯的「執行 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 切換 Vulncheck」 命令可用於為目前的 workspace 開啟或關閉基於匯入的分析。
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
檔案頂端的「重設 go.mod 診斷」
codelens。否則,結果將在一個小時後自動失效。 - 這些功能目前不會回報標準函式庫或工具鏈中的漏洞。我們仍在研究在何處顯示結果以及如何協助使用者處理問題的 UX。