composer audit不是装上就能用的命令,它仅在Composer 2.5.0+中存在且默认不启用,需先升级并开启experimental.audit配置;它严格比对composer.lock中已安装包的name+version与Packagist安全数据库,不扫描代码、私有包、dev分支或PHP自身漏洞,依赖锁文件准确性和网络连通性。

composer audit 不是“装上就能用”的命令,它只在 Composer 2.5.0+ 中存在,且默认不启用安全扫描逻辑——直接运行大概率报错或静默退出。
为什么 composer audit 报 “Command not defined” 或没输出?
这不是插件没装,是版本或配置没到位:
- 运行
composer --version,输出为2.4.x或更低 → 必须升级:composer self-update - 版本 ≥ 2.5.0 但
composer list | grep audit无结果 → 缺少实验特性开关:composer config --global experimental.audit true - 用了精简版
composer.phar(如某些 CI 镜像)→ 审计模块被裁剪,需换完整版 -
composer.lock不存在、损坏,或哈希校验失败 →audit拒绝扫描,返回空结果
composer audit 实际查什么、不查什么?
它只比对 composer.lock 中已安装包的 name + version 是否命中 Packagist 安全数据库(FriendsOfPHP/security-advisories),不是代码扫描器,也不管你有没有调用漏洞函数:
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
- ✅ 查:已 lock 的生产依赖和 dev 依赖(除非加
--no-dev) - ❌ 不查:
composer.json里声明但未 install 的包、fork 包(如myorg/guzzle)、私有仓库包(除非显式配置security-advisories元数据) - ❌ 不查:
dev-main、dev-feature/x等不稳定版本(advisories 数据库不收录) - ❌ 不查:PHP 自身漏洞、扩展漏洞、OS 层问题 —— 它只管 PHP 包
怎么让 composer audit 输出真正有用的结果?
默认输出容易淹没重点,关键靠参数控制范围和格式:
- 聚焦高危:
composer audit --severity=high --severity=critical(--level已弃用,用--severity) - 排除干扰:
composer audit --no-dev(生产环境 CI 推荐) - 强制刷新缓存(避免本地快照过期):
composer audit --force - 机器可读输出:
composer audit --format=json,配合jq提取字段,例如:composer audit --format=json --severity=critical | jq '.advisories[] | {package: .packageName, cve: .advisoryId}' - 跳过特定误报(慎用):
composer audit --ignore=guzzlehttp/guzzle:12345(12345 是 advisory ID)
网络失败、漏报、误报时怎么办?
Could not fetch advisories 这类错误不是项目问题,而是环境限制:
- 公司代理/防火墙拦截
https://packagist.org/advisories→ 临时切回官方源:composer config --global repo.packagist.org composer https://packagist.org - 用了镜像源(如阿里云)→ 大部分镜像不同步安全通告接口,必须直连 packagist.org
- 报告了 CVE 但你根本没用到相关代码 → 去
FriendsOfPHP/security-advisories查原始描述,看「Exploitation conditions」是否匹配你的使用场景 - 想覆盖更广漏洞源(如 NVD、OSS Index)→ 补位用
snyk test --file=composer.lock,但注意上传composer.lock的合规风险
composer audit 就只是个安静的摆设。

















