直接运行 composer audit 即可扫描 PHP 依赖漏洞,需满足 Composer ≥ 2.5.0、存在有效 composer.lock 且能访问 Packagist 安全数据库;该命令只读不修改,安全可靠。

直接在项目根目录运行 composer audit 就能检查 PHP 依赖漏洞,前提是 Composer 版本 ≥ 2.5.0、composer.lock 文件存在且网络可访问 Packagist 安全数据库。它不修改任何文件,只读取锁文件比对已知漏洞,安全可靠。
确认环境是否支持 audit
执行以下命令验证基础条件:
-
composer --version—— 输出必须是 2.5.0 或更高版本;低于此版本会提示 “Command 'audit' is not defined” -
composer list | grep audit—— 若无输出,需启用实验特性:composer config --global experimental.audit true -
ls composer.lock—— 确保锁文件存在且内容完整(不能为空或被 .gitignore 忽略) -
curl -I https://packagist.org—— 验证能否连通 Packagist,避免出现Could not fetch advisories: cURL error 7
执行有效扫描
默认命令只扫描生产依赖,容易漏掉开发工具类风险。推荐按场景组合参数:
- 上线前精简检查(仅生产依赖):
composer audit --no-dev --severity=critical,high - CI 流水线全量检查(含测试/构建依赖):
composer audit --dev --no-interaction --severity=critical,high - 结构化输出供脚本解析:
composer audit --format=json --no-dev | jq '.advisories[] | select(.severity == "critical")'(需提前安装jq) - 临时忽略已知可控漏洞(慎用):
composer audit --ignore=CVE-2023-12345,但必须在代码注释中写明豁免理由
常见结果不准或无输出的原因
不是工具失效,而是数据源或配置未就位:
立即学习“PHP免费学习笔记(深入)”;
-
composer.lock过期或未生成 —— 运行composer install或composer update更新锁文件 - 使用了私有仓库但未声明为
"type": "composer",或未配置"packagist.org": false,导致 audit 跳过该源 - 镜像源不支持安全通告接口 —— 国内多数镜像(如阿里云、腾讯云)不同步
security-advisories数据,建议临时切回官方源:composer config --global repo.packagist.org https://packagist.org - 包版本含
dev-前缀(如dev-main)—— audit 主动跳过,因安全数据库不收录开发分支 - 漏洞未被收录进 FriendsOfPHP/security-advisories 库 —— 小众包或新披露 CVE 可能尚未同步,需人工查 GitHub SECURITY.md 或 Snyk 补充
发现漏洞后该怎么做
audit 只报告,不修复。关键在判断真实影响并采取动作:
- 查看漏洞详情中的
affected versions范围,确认composer.lock中安装的版本确实在其中 - 检查该包是否被实际调用 —— 例如
phpunit/phpunit在生产环境未加载,即使有高危 CVE 也无运行时风险 - 优先升级到已修复版本:
composer update vendor/package --with-dependencies;若无法升级,考虑禁用相关功能或打补丁 - 更新后重新运行
composer audit并提交新的composer.lock,确保 CI 和部署环境一致



















