必须升级 Composer 至 ≥2.5.0 才能使用 audit 命令,它基于 composer.lock 扫描已安装包的实际版本,支持 JSON 输出、退出码控制和忽略低危漏洞,但不自动修复,需手动 update 或替换,并依赖 lock 文件与最新安全数据库。

直接用 composer audit,但前提是 Composer 版本 ≥ 2.5.0 —— 低于这个版本会报错 Command "audit" is not defined,不是命令写错了,是根本没这个功能。
确认并升级 Composer 到 2.5+ 才能用 audit
运行 composer --version 看输出。如果显示 Composer version 2.4.x 或更低,composer audit 就不可用。
- 先试
composer self-update(需对 Composer 二进制有写权限) - 失败就重装:
curl -sS https://getcomposer.org/installer | php && sudo mv composer.phar /usr/local/bin/composer - 升级后必须再跑一次
composer --version验证是否 ≥ 2.5.0
audit 只读 composer.lock,不看 composer.json 的约束
它扫描的是 vendor/ 里**实际安装的版本**。比如 composer.json 写了 "guzzlehttp/guzzle": "^7.0",但 composer.lock 锁的是 7.2.0,audit 检的就是 7.2.0 这个具体版本。
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
- 没
composer.lock就扫不了 —— CI 里别跳过composer install --no-interaction - 默认连
require-dev里的包也扫(如 PHPUnit),生产环境建议加--no-dev - 输出为空 ≠ 没漏洞,可能是 PHP-SECADV 数据库还没收录该 CVE
让 audit 结果可集成、可卡点:JSON 和退出码
别靠人眼扫终端输出,尤其在 CI 流水线里。
-
composer audit --format=json:标准 JSON,含advisory、severity、package、version等字段,适合脚本解析 -
composer audit --fail-on-security-violations:遇到中危及以上漏洞直接返回非零退出码,CI 可据此中断构建 -
composer audit --ignore-severity=low:跳过低危项,聚焦 critical/high/medium -
composer audit --force:跳过本地缓存,每次查远程数据库,适合 CI;本地开发用默认缓存即可
audit 不修复,只提示;修复得靠 update 或替换
它不改代码、不升版本、不处理配置错误,纯比对公开通告。
- 看到
"fixed":"5.4.22"字段?说明当前版本有漏洞,升到5.4.22就行 - 用
composer show symfony/http-foundation确认当前版本 - 尝试
composer update symfony/http-foundation --with-all-dependencies - 升级后务必重跑
composer audit验证是否消除 - 某些包已停止维护(如旧版
flysystem),不能硬升,得换替代方案
最容易被忽略的是:audit 的结果完全依赖 composer.lock 的状态和本地安全数据库快照。CI 中没跑 install、内网镜像没同步 advisories 接口、或长期不更新 Composer 自身 —— 这三类情况会让 audit 彻底失效,但你可能还觉得“扫过了,没问题”。

















