Composer的--audit命令默认不支持JSON输出,仅提供文本报告;自2.5.0起新增--format=json选项,可直接生成含vulnerabilities数组的标准JSON报告。

Composer 的 --audit 命令本身**不支持直接输出 JSON 格式**,它默认只输出人类可读的文本报告(含漏洞摘要、包名、严重等级等)。若需机器可读的 JSON 报告,必须配合其他工具或使用 Composer 2.5+ 的实验性功能。
使用 --format=json(Composer 2.5.0+)
从 Composer 2.5.0 开始,composer audit 新增了 --format=json 选项,这是最直接的方式:
- 确保已升级到 Composer ≥ 2.5.0:
composer self-update - 运行命令:
composer audit --format=json - 输出为标准 JSON,包含
vulnerabilities数组、每个漏洞的id、title、severity、package、version、fixedIn等字段 - 可直接重定向保存:
composer audit --format=json > audit-report.json
兼容旧版 Composer(
若无法升级 Composer,可通过解析文本输出 + 工具转换实现近似效果:
- 使用
--no-ansi --no-interaction减少干扰字符:composer audit --no-ansi --no-interaction - 借助
jq或自定义脚本清洗并结构化(例如用 Python 的re模块提取 CVE 编号、包名、版本等) - 更稳妥的做法是调用 Packagist Security API:向
https://packagist.org/security-advisories.json发起请求,传入项目依赖清单(composer show --format=json输出),自行比对已知漏洞
注意审计数据来源与局限性
composer audit 的结果依赖 Packagist 官方维护的安全通告数据库,不是本地扫描工具:
- 仅检测已收录在 FriendsOfPHP/security-advisories 中的漏洞
- 不检查自定义私有包、未提交到 Packagist 的 fork 包或代码逻辑漏洞
- JSON 输出中
severity字段值为low/medium/high/critical,无 CVSS 分数
CI/CD 中建议的稳定用法
在自动化流程中生成可靠 JSON 报告,推荐组合使用:
- 强制指定 Composer 版本(如 GitHub Actions 中用
composer/setup-php@v2设置composer-version: '2.5') - 添加失败退出码判断:
composer audit --format=json || exit 1(有漏洞时返回非零码) - 用
jq过滤关键信息,例如只提取高危以上漏洞:composer audit --format=json | jq '.vulnerabilities[] | select(.severity == "high" or .severity == "critical")'










