IDE 中的漏洞扫描
与 Go 语言服务器 集成的编辑器(例如带有 Go 扩展的 VS Code)可以检测依赖项中的漏洞。
有两种模式可以检测依赖项中的漏洞。两种模式都由 Go 漏洞数据库 支持,并且相互补充。
- 基于导入的分析:在此模式中,编辑器通过扫描工作区中导入的软件包集来报告漏洞,并将结果作为诊断信息显示在
go.mod
文件中。此模式速度很快,但如果您的代码导入包含漏洞符号的软件包,但无法访问具有漏洞的函数,则可能会报告误报。此模式可以通过"vulncheck": "Imports"
gopls 设置启用。 Govulncheck
分析:此分析基于govulncheck
命令行工具,该工具嵌入在gopls
中。这提供了一种低噪声、可靠的方法来确认您的代码是否实际调用了漏洞函数。由于此分析的计算成本可能很高,因此必须使用与基于导入的分析的诊断报告关联的“运行 govulncheck 以验证”代码操作或使用"codelenses.run_govulncheck"
代码镜头手动触发此分析。go.mod
文件。
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"
codelens。否则,结果将在 1 小时后自动失效。 - 这些功能目前不会报告标准库或工具链中的漏洞。我们仍在研究在何处展示调查结果以及如何帮助用户处理问题方面的 UX。