Composer audit 命令自2.5.0起为实验性功能,默认禁用,需配置experimental.audit=true才可用;依赖Packagist漏洞数据,PHP要求≥8.0,推荐用roave/security-advisories等成熟方案替代。

Composer audit 命令本身并不存在 —— 它是 Composer 2.5+ 新增的实验性功能,但默认未启用,且需额外配置才能使用。 直接运行 composer audit 会报错 Command "audit" is not defined,除非你已手动启用安全插件或升级到支持该命令的版本并启用实验特性。
确认 Composer 版本与 audit 命令可用性
Composer 的 audit 命令从 v2.5.0 开始以实验性功能引入,但必须满足两个前提:
- Composer 版本 ≥ 2.5.0(运行
composer --version验证) - 启用实验性命令:需在全局或项目级配置中设置
experimental.audit为true - 底层依赖安全数据来自 Symfony Security Checker 的镜像服务,该服务已于 2023 年底停用,现由
composer/security-advisories包和 Packagist 的 advisory 数据替代
若版本过低(如 2.4.x 或更早),audit 命令根本不会被识别,此时应优先升级 Composer:
composer self-update
启用 audit 命令并运行基础检查
即使版本达标,audit 默认仍被禁用。启用方式如下:
- 全局启用(推荐):
composer config -g experimental.audit true
- 项目级启用(仅当前目录生效):
composer config experimental.audit true
- 启用后,直接运行:
composer audit
- 可加
--format=json获取结构化输出,便于 CI 解析:composer audit --format=json
注意:首次运行可能较慢,因需拉取 Packagist 的最新 advisory 数据缓存;后续执行会复用本地缓存。
audit 不工作时的替代方案(更可靠)
由于 audit 依赖实验性通道且易受网络/缓存影响,生产环境建议使用成熟替代方案:
- 使用官方维护的
roave/security-advisories(强制阻止已知漏洞包安装):composer require --dev roave/security-advisories:dev-latest
- 调用 Packagist 官方 API 手动检查(适合脚本集成):
curl -s "https://packagist.org/packages/{vendor}/{package}/advisories.json" | jq '.advisories[] | select(.severity == "critical" or .severity == "high")' - CI 中推荐结合
composer show --outdated --direct+ 已知漏洞数据库比对,而非依赖audit
尤其要注意:当项目含私有仓库或 fork 包时,audit 可能完全跳过检查 —— 它只校验 Packagist 上已收录的 advisory 记录。
常见错误与兼容性陷阱
实际执行中容易遇到以下问题:
-
Could not fetch advisories: cURL error 60:通常是 CA 证书过期,运行composer config -g cafile /path/to/cacert.pem指定新版证书 -
No advisories found不代表绝对安全,只说明当前 lock 文件中无已知匹配的高危 CVE(例如未收录的 0day 或自定义组件漏洞) - PHP 7.4 或更低版本用户无法使用
audit(Composer 2.5+ 要求 PHP ≥ 8.0) - 使用
composer install --no-plugins会跳过audit插件加载,导致命令不可见
真正关键的不是命令是否存在,而是你是否把 composer.lock 提交进 Git、是否定期更新依赖、是否在 CI 中阻断含已知 CVE 的构建 —— 这些比记住一个实验命令重要得多。










