composer audit 是 Composer 2.5+ 内置的安全审计命令,用于扫描 composer.lock 中包的已知漏洞,依赖 FriendsOfPHP/security-advisories 数据库,支持按严重程度、JSON 输出、跳过 dev 依赖等选项,但不覆盖 CVE 延迟收录、私有包及逻辑漏洞。

Composer 自带的 audit 命令能快速发现已知漏洞,但默认不启用,且只查 PHP 官方安全公告(PHP Security Advisories Database),不覆盖所有第三方漏洞库。
composer audit 命令怎么用
从 Composer 2.5 开始内置该命令,无需额外插件:
- 基础扫描:
composer audit—— 检查当前composer.lock中所有已安装包 - 仅报告高危漏洞:
composer audit --severity=high(可选值:low、medium、high、critical) - 输出 JSON 格式供 CI 解析:
composer audit --format=json - 跳过 dev 依赖(生产环境更关注):
composer audit --no-dev
注意:它不自动升级包,只是“告诉你哪里有问题”。
audit 查不到 CVE 或私有漏洞的常见原因
它依赖的是 FriendsOfPHP/security-advisories 数据库,所以:
- 新发布的 CVE 可能尚未被收录,通常有数小时到数天延迟
- 未被该数据库收录的项目(如某些小众 fork、内部私有包)不会出现在结果中
- 不检查你代码里手写的 SQL、硬编码密钥等逻辑漏洞 —— 这是 SAST 工具的事
- 如果
composer.lock不存在或损坏,audit会直接报错:Could not find lock file
audit 和第三方工具(如 SensioLabs Security Checker)的区别
旧版常用 sensiolabs/security-checker,但它已于 2023 年下线;现在官方推荐 composer audit,但能力有边界:
-
composer audit是本地执行、离线可运行(只要数据库已缓存),不上传依赖信息 - 它不支持自定义漏洞源,也不能关联你的 GitHub/GitLab 仓库做持续监控
- 若需更深度检测(如供应链投毒、许可证风险、版本漂移),得配合
phpstan、roave/security-advisories(阻止已知漏洞版本安装)或商业 SCA 工具
例如,加这行到 composer.json 可在 install/update 时就拦截高危版本:"require": {"roave/security-advisories": "dev-latest"}
CI/CD 中集成 audit 的实用建议
别只在本地跑,把它放进构建流程才真正起作用:
- GitHub Actions 示例片段中,记得先
composer install --no-interaction --no-progress再composer audit --no-dev --severity=critical - GitLab CI 中,若用
composer:2镜像,确认版本 ≥ 2.5(可用composer --version验证) - 审计失败时不要静默忽略 —— 加
--fail-on-error让构建直接退出 - 定期手动运行
composer audit --all(检查所有已知包,不限于当前 lock)可辅助评估技术债
真正容易被忽略的是:audit 结果依赖 lock 文件的完整性。如果你用 composer update 跳过 lock、或手动编辑过它,audit 可能漏检 —— 别绕过锁文件机制。










