composer audit 命令不存在,官方直到2.5.0也未内置该功能;实际安全检查应使用 composer show --outdated --security-only(需≥2.5.0),但其仅依赖Packagist公开漏洞库,存在延迟与覆盖盲区。

composer audit 命令本身并不存在 —— Composer 官方在 2.5.0 版本之前没有内置安全审计功能,直接运行 composer audit 会报错 Command "audit" is not defined。
为什么找不到 composer audit?
这是最常被误解的一点:Composer 核心不提供 audit 子命令。所谓“composer audit”实际是社区误传,或混淆了第三方插件(如 sensiolabs/security-checker 已废弃)和 GitHub Dependabot、Packagist Security Advisories 等外部服务。
- Composer 2.5.0+ 引入了
composer validate --with-dependencies,但仅校验composer.json结构,不检查漏洞 - 真正可用的安全检查依赖 Packagist 的公开漏洞数据库,需通过
composer show --outdated --security-only或专用工具触发 - 官方推荐方式是使用
composer audit的替代命令:composer security:audit—— 但它只在安装了composer/composer-security-plugin(非官方)或启用 GitHub Integration 后才生效,且目前未被 Composer 主干采纳
当前最可靠的安全检查方式(2024 年实操)
使用 Composer 内置的 composer show 配合 Packagist 安全通告 API,是最轻量、无需额外插件的方法:
- 运行
composer show --outdated --direct查看直接依赖的过期版本(间接提示潜在风险) - 加上
--security-only参数(Composer ≥ 2.5.0)可过滤出已知有安全通告的包:composer show --outdated --security-only
- 若输出为空,不代表绝对安全 —— Packagist 安全通告存在延迟,且部分私有/未上报漏洞不会出现在该列表中
- 该命令依赖 Packagist 的 security-advisories 数据库,需确保本地 Composer 能访问公网
容易忽略的关键限制
即使 composer show --security-only 显示无问题,也不能认为项目安全:
- 它只检查 Packagist 公开记录的 CVE,不扫描代码逻辑漏洞(如反序列化、SQL 注入链)
- 不分析
require-dev中的包(除非显式加--dev),但测试工具如phpunit若存在 RCE 漏洞,CI 环境仍可能被利用 - 对 fork 的包、私有仓库(如 GitLab 私有 Packagist)完全不可见 —— 这类依赖必须手动跟踪上游安全公告
- Composer 不校验二进制依赖(如
hirak/prestissimo的 phar 文件)、扩展(如ext-gd)或系统级组件(如 OpenSSL 版本)
真正落地的安全闭环,得靠 composer show --security-only + GitHub Dependabot / Snyk 扫描 + 自定义 CI 脚本比对 composer.lock 的 hash 变更。别指望一个命令包打天下。










