google/osv-scanner
安全用 Go 编写的命令行漏洞扫描器,基于 OSV 数据库检查项目依赖、锁文件和容器镜像中的已知漏洞。
项目介绍
OSV-Scanner 是一个命令行漏洞扫描工具,把项目依赖与 OSV 数据库 中的安全公告进行匹配。它是 OSV 官方支持的前端,也是 OSV-Scalibr 库的命令行接口。它可以扫描源码目录、锁文件、容器镜像和操作系统包,面向需要跨语言生态审计依赖的开发者。
支持的语言包括 C/C++、Dart、Elixir、Go、Java、JavaScript、PHP、Python、R、Ruby、Rust,覆盖 npm、pip、yarn、Maven、Go modules、Cargo、gem、Composer、NuGet 等包管理器。容器镜像扫描覆盖 Alpine、Debian、Ubuntu 的系统包,以及 Go、Java、Node、Python 产物。调用分析模式可以判断有漏洞的函数是否真的被使用,从而减少误报;它也能扫描 vendored C/C++ 代码。另有许可证扫描模式,通过 deps.dev 数据把依赖许可证与 SPDX 允许列表进行比对。
安装
推荐从 releases 页面 下载对应平台的预编译二进制;平台相关步骤见 安装文档。从源码构建需要 Go 工具链:
go install github.com/google/osv-scanner/v2/cmd/osv-scanner@latest
README 中的说明针对 V2 beta;仍在使用 V1 的项目应参考 V1 文档。
扫描项目
安装后,对源码目录运行递归扫描:
osv-scanner scan source -r /path/to/your/dir
扫描器会遍历目录中的受支持包文件,例如 package.json、go.mod、pom.xml,并输出发现的依赖漏洞。容器镜像的扫描方式类似:
osv-scanner scan image my-image-name:tag
若要检查许可证,加上 --licenses;允许列表以 SPDX 标识提供,例如 osv-scanner --licenses="MIT,Apache-2.0" path/to/directory。支持的锁文件与产物范围见 支持的语言与锁文件说明。
离线与修复模式
下载离线数据库后,扫描不再需要网络访问:
osv-scanner --offline --download-offline-databases ./path/to/your/dir
fix 命令(实验性)会根据依赖深度、最低严重级别、修复策略和投资回报等条件建议升级包版本,目前支持 npm package-lock.json(原地修改)、npm package.json(重新锁定)和 Maven pom.xml(覆盖版本)。npm 示例:
osv-scanner fix --max-depth=3 --min-severity=5 --ignore-dev --strategy=in-place -L path/to/package-lock.json
npm 还提供交互模式,通过 -M 和 -L 分别传入清单与锁文件。项目警告:fix 在不可信项目上运行有风险,可能触发包管理器脚本或访问项目指定的外部仓库,只应对自己信任的代码和产物使用。
数据与隐私
在常规在线模式下,OSV-Scanner 会把包名、版本、生态和文件哈希发送给 OSV.dev API,并向 deps.dev API 查询依赖解析、容器元数据、许可证信息和弃用状态。若使用原生仓库解析而非 deps.dev,还可能查询 Maven Central、npm registry 或 PyPI。这些请求不传输源代码,离线模式会关闭网络请求。
HotRepo 点评
OSV-Scanner 是一个范围明确、可核查的安全工具:它封装 OSV 公告数据,通过命令行扫描暴露出来,文档和源码都在仓库中。HotRepo 记录显示,它在 2026-11-06 的 Go 日榜上以当日新增 31 Star 位列第 22 名;这只是单条快照,说明它曾出现在语言榜上,不能据此判断整体热度。该项目在 2022 年 12 月于 Hacker News 被讨论,评论者当时欢迎围绕 OSV 的开发者友好工具,也有人追问 SBOM 来源;这些讨论针对早期阶段,与当前 V2 beta 无关。对已经在用 OSV、或需要支持离线的多生态依赖审计的团队来说,这个工具直接面向这类工作流。
本文由 AI 根据项目 README 生成,更新于 ,以项目官方文档为准。