Composer 无内置 audit 命令,config 无法启用该功能;composer audit 是 2.5+ 实验性命令,需手动运行、依赖外部安全数据库,不支持自动周期执行或配置开关。

Composer 本身没有内置的 composer audit 命令,也不存在通过 config 直接启用“包审计功能”的官方机制。所谓“自动检查配置”是常见误解——composer audit 是 Composer 2.5+ 引入的**实验性安全审计命令**,需手动触发,且依赖外部服务(Security Advisory Database),不支持全自动周期运行或 config 开关。
为什么 composer config 无法启用 audit 功能
Composer 的 config 命令管理的是本地仓库、平台配置、超时、缓存路径等运行时参数(如 github-oauth、secure-http),但安全审计属于一次性 CLI 操作,不对应任何持久化配置项。试图执行 composer config audit true 或类似操作会报错:[InvalidArgumentException] Unknown configuration setting "audit"。
composer audit 的真实使用方式与前提
该命令仅在满足以下全部条件时可用:
- Composer 版本 ≥ 2.5.0(运行
composer --version确认) - 项目已执行过
composer install或composer update,生成了有效的composer.lock - 网络可访问
https://security.symfony.com(Composer 默认使用的 Symfony 安全通告源)
基础用法:
composer audit
常用选项:
-
--format=json:输出结构化 JSON,便于 CI 解析 -
--no-dev:跳过require-dev中的包(默认检查全部) -
--locked:强制基于composer.lock检查(推荐,避免因未锁版本导致漏报)
如何在 CI/CD 中“自动检查”而非依赖 config
若目标是持续集成中自动阻断含已知漏洞的依赖,应绕过 config,改用脚本化调用 + 退出码判断:
#!/bin/sh # 在 GitHub Actions / GitLab CI 等环境中运行 if ! composer audit --locked --no-dev; then echo "❌ Security audit failed: known vulnerabilities detected" exit 1 fi
注意点:
- 该命令默认返回非零退出码(如 1)表示发现高危/严重漏洞,可直接用于流程控制
- 不建议在本地开发中设为 pre-commit hook——响应慢、依赖网络、且低风险提示易造成干扰
- 它不替代
sensiolabs/security-checker(已废弃)或第三方工具如roave/security-advisories(通过冲突约束阻止安装已知问题包)
真正容易被忽略的是:audit 结果滞后于 CVE 公布,且只覆盖 Symfony 安全数据库收录的 PHP 包;大量私有包、未提交通告的漏洞、或 JavaScript 子依赖(如通过 npm-asset 引入)完全不在检测范围内。别把它当成万能盾牌。










