推荐使用govulncheck(查依赖CVE)、gosec(查代码风险)和trivy(扫go.sum/镜像),三者分层覆盖依赖、代码、产物维度;govulncheck需go install并运行./...,gosec支持规则排除与HTML报告,trivy可扫描文件系统与镜像,CI中应设严重级别阻断。

在 Go 项目中检测依赖漏洞,推荐使用官方支持、社区活跃且集成方便的工具——govulncheck(Go 官方出品)和 gosec(静态代码安全扫描),辅以 trivy(通用容器/代码/依赖扫描)。它们覆盖不同维度:govulncheck 查 CVE 漏洞数据库中的已知 Go 模块风险;gosec 检查代码中硬编码密码、不安全函数调用等;trivy 可扫描 go.sum、Docker 镜像甚至整个项目目录。
安装并使用 govulncheck(检测依赖漏洞)
govulncheck 是 Go 团队维护的权威依赖漏洞扫描器,基于 Go 官方漏洞数据库,无需额外配置即可工作。
- 安装命令:go install golang.org/x/vuln/cmd/govulncheck@latest
- 确保
GOBIN或go install默认路径已加入$PATH(如$HOME/go/bin) - 在项目根目录运行:govulncheck ./...(扫描所有包)或 govulncheck ./cmd/myapp(指定包)
- 支持 JSON 输出便于 CI 集成:govulncheck -json ./... > vulns.json
安装并使用 gosec(检测代码级安全风险)
gosec 是基于 AST 分析的静态检查工具,能识别常见反模式,比如 http.ListenAndServe 未启用 TLS、crypto/md5 等弱哈希、日志中打印敏感信息等。
- 安装:go install github.com/securego/gosec/v2/cmd/gosec@latest
- 基础扫描:gosec ./...(跳过测试文件)
- 排除特定规则(如忽略硬编码凭证警告):gosec -exclude=G101 ./...
- 生成 HTML 报告:gosec -fmt=html -out=gosec-report.html ./...
用 Trivy 扫描 go.sum 和构建产物
Trivy 更适合 CI 流程或发布前全面检查,支持直接解析 go.sum 文件匹配已知漏洞,也能扫描编译后的二进制或容器镜像。
立即学习“go语言免费学习笔记(深入)”;
- 安装(macOS/Linux):brew install aquasecurity/trivy/trivy 或下载二进制:trivy 官方安装页
- 扫描依赖(需有 go.sum):trivy fs --security-checks vuln --scanners vulnerability .
- 扫描 Docker 镜像:trivy image my-go-app:latest
- CI 中静默失败(有高危漏洞时退出非 0):trivy fs --exit-code 1 --severity CRITICAL,HIGH .
组合使用建议与注意事项
单一工具无法覆盖全部风险。实际项目中建议分层使用:
- 日常开发:每次提交前本地跑
govulncheck ./...+gosec ./... - CI 流水线:用
trivy扫描go.sum和最终镜像,并设置严重级别阈值阻断发布 - 注意
govulncheck不检查私有模块(仅公开索引模块),若使用私有仓库需自行同步漏洞数据或结合 SCA 工具 - 所有工具都依赖最新数据库,定期更新:如
govulncheck -update(新版已自动更新)、trivy image --download-db-only










