编程 Google 开源 OSV-Scanner:一条命令扫出所有依赖漏洞,还带离线模式

2026-09-12 09:51:31

Google 开源 OSV-Scanner:一条命令扫出所有依赖漏洞,还带离线模式

作为一名开发者,或者经常 Vibe Coding 的人,相信大家跟各种「第三方依赖」打交道比较多。
写个前端项目,npm install 一下,几十上百个依赖就进来了;写个 Python 脚本,pip install 一堆包;Java 项目的 pom.xml 更是写得满满当当。
依赖让我们的开发效率大大提升,但背后隐藏的安全风险,也是不容小觑的。
省事是省事了,但背后的安全风险往往让人防不胜防。你引入的可能是别人写好的轮子,但同时也可能把别人代码里的漏洞一并带进了自己的项目。
等问题发生了,再去补救往往已经来不及了。
今天就给大家介绍一款由 Google 官方出品的开源漏洞扫描工具——OSV-Scanner,它能帮你轻松解决这个问题。

项目介绍

OSV-Scanner是 Google 开源的一款轻量级命令行工具,专门用于扫描项目依赖中的已知安全漏洞。

它能连接你的项目依赖列表与 OSV.dev 数据库中的漏洞信息,快速定位哪些依赖存在安全隐患。
这个项目诞生于 Google 的安全团队,是一个官方支持的 OSV 数据库前端工具。与其他漏洞扫描工具不同,OSV-Scanner 基于开源且权威的 OSV.dev 数据库,每个漏洞公告都来自于可信的来源。
目前这个项目在 GitHub 上已经有 9.8k Star。

核心亮点

支持超多语言:包括 C/C++、Dart、Elixir、Go、Java、JavaScript、PHP、Python、R、Ruby、Rust 等 11+ 种主流语言。
支持主流包管理器:覆盖了 npm、pip、yarn、maven、go modules、cargo、gem、composer、nuget 等 19+ 种锁文件类型。
容器镜像分层扫描:支持容器镜像的分层扫描,能够识别漏洞是在哪个容器层引入的,还能区分是操作系统包的漏洞还是语言依赖的漏洞。
完全离线模式:OSV-Scanner 提供了离线模式。你可以先预下载 OSV 数据库到本地,然后在断网的情况下完成扫描,无需担心代码或依赖信息泄露。
引导式修复建议:会根据依赖深度、漏洞严重程度、修复策略等因素,推荐最小化的版本升级方案。
许可证扫描:除了漏洞扫描,还能帮你检查依赖的许可证信息。

主要功能

1、源码目录扫描
这是最基本也是最常用的功能。你只需要一条命令,就能递归扫描指定目录中的所有支持的包文件:

osv-scanner scan source -r /path/to/your/dir

它会自动识别 package.json、go.mod、pom.xml 等文件,然后检查里面的依赖是否存在已知漏洞。
更厉害的是,它还支持调用分析功能,能够判断漏洞函数是否真的在你的项目中被使用,这样可以大大减少误报,让告警更精准。
2、容器镜像扫描
对于容器镜像,你可以这样扫描:

osv-scanner scan image my-image-name:tag

它会进行分层扫描,让你清楚地知道每个漏洞是在哪个层引入的,这样修复起来更有针对性。
3、多种输出格式
OSV-Scanner 支持多种输出格式,包括表格、Markdown、JSON、SPDX 等,你可以根据需要选择:

# 输出 JSON 格式
osv-scanner scan -L package-lock.json --format json

# 保存到文件
osv-scanner scan -L package-lock.json --output-file scan-results.txt

甚至还有 --serve 标志,可以直接在本地 8000 端口启动一个 HTML 报告,查看起来更直观。
4、Pre-Commit 集成
你还可以把 OSV-Scanner 集成到 pre-commit 钩子中,这样每次提交代码前都会自动扫描一遍,把问题扼杀在摇篮里:

repos:
  - repo: https://github.com/google/osv-scanner/
    rev: v2.2.4
    hooks:
      - id: osv-scanner

快速入手

官方推荐的方式是直接下载预编译的二进制文件,大家可以在 GitHub Releases 页面找到对应你平台的版本。
如果你已经安装了 Go 环境,也可以直接用 go install 安装:

go install github.com/google/osv-scanner/v2/cmd/osv-scanner@latest

安装完成后,你可以用以下命令验证:

osv-scanner --version

最基本的用法就是扫描一个源码目录:

# 扫描当前目录
osv-scanner scan -r .

# 扫描指定目录
osv-scanner scan -r /path/to/your/project

如果你只想扫描某个特定的锁文件:

osv-scanner scan -L package-lock.json

扫描 Docker 镜像:

osv-scanner scan image my-image:latest

注意:这个功能需要你的系统中安装了 docker 命令。
离线模式
首先下载离线数据库:

osv-scanner --offline --download-offline-databases ./path/to/your/dir

然后就可以在断网情况下扫描了:

osv-scanner --offline -r ./your-project

引导式修复
对于 npm 项目,可以这样使用修复功能:

# 命令行模式
osv-scanner fix \
    --max-depth=3 \
    --min-severity=5 \
    --ignore-dev \
    --strategy=in-place \
    -L path/to/package-lock.json

# 交互式模式
osv-scanner fix \
    -M path/to/package.json \
    -L path/to/package-lock.json

许可证扫描
检查依赖许可证:

# 只显示许可证摘要
osv-scanner --licenses path/to/repository

# 检查是否符合白名单
osv-scanner --licenses="MIT,Apache-2.0" path/to/directory

写在最后

在开源软件无处不在的今天,依赖安全已经成为每个开发者都必须重视的问题。
OSV-Scanner 这样的工具,让我们能够用极低的成本,就能给自己的项目做一次全面的安全体检。
它的优势很明显:
• Google 官方出品,质量有保障
• 支持的生态非常全面
• 功能丰富,从扫描到修复一条龙
• 可以离线使用,隐私有保障
• 轻量级,性能出色
无论你是个人开发者,还是在企业中工作,都建议把 OSV-Scanner 加入到你的开发工作流中。定期给项目做个扫描,及时发现和修复漏洞,让你的代码更安全。
GitHub:

https://github.com/google/osv-scanner

推荐文章

程序员茄子在线接单