composer 2.5.0+才支持audit命令,旧版需升级;默认只查dev依赖,生产环境须加--no-dev;cve无链接需手动查询;ci中慎用退出码,优先结合composer show --outdated和depends定位深层漏洞。

composer audit 会报错:command not found
Composer 本身从 2.5.0 版本起才内置 audit 命令,低于这个版本直接运行会提示 Command "audit" is not defined。如果你的 Composer 是旧版(比如通过系统包管理器安装的),得先升级:
- 运行
composer self-update升级到最新稳定版(推荐) - 或用
curl -sS https://getcomposer.org/installer | php下载新 phar 替换旧文件 - 验证版本:
composer --version,确保输出中包含2.5.0+
composer audit 默认只检查 dev 依赖,生产环境容易漏报
composer audit 默认行为是只扫描 require-dev 中的包,而真实线上风险往往来自 require。必须加 --no-dev 才能聚焦生产依赖:
composer audit --no-dev
如果不加这个参数,可能看到一堆低危警告(比如测试工具里的漏洞),却忽略掉 monolog/monolog 这类核心运行时组件的问题。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 想同时看全部依赖(含 dev):去掉
--no-dev - 想快速定位高危(CVSS ≥ 7.0):加
--severity=high或--severity=critical - 结果里出现
ignored表示该漏洞已被项目手动豁免(见composer.json的audits.ignored字段)
audit 输出的 CVE 编号点不开?需要手动查
composer audit 只显示 CVE 编号(如 CVE-2023-1234)和简短描述,不带链接。它不会自动打开浏览器,也不内嵌详细说明。
- 复制 CVE 编号,去 NVD 或 Symfony Security 查原始报告
- 注意看
affected versions范围——有时你用的版本其实在安全范围内,只是 Composer 检测逻辑偏保守 - 某些 CVE 实际影响需结合使用方式判断(例如仅当启用特定扩展或配置时才触发)
CI/CD 里用 audit 失败就中断构建?要小心误伤
在 GitHub Actions 或 GitLab CI 中写 composer audit --no-dev --severity=critical 很常见,但要注意:官方漏洞数据库(Packagist Security Advisories)偶尔会收录误报或已修复但未同步标记的条目。
- 建议首次接入时先用
--dry-run(实际无此参数,可改用--format=json+ 脚本解析)观察历史问题 - 更稳妥的做法是配合
composer show --outdated --direct升级已知有补丁的包,而不是死守 audit 退出码 - 如果团队决定豁免某个 CVE,请明确写进
composer.json:"audits": {"ignored": ["CVE-2023-1234"]},否则下次 audit 还会报
真正卡住上线的,往往不是 audit 报出的第一页 CVE,而是那个没写在 require 里、但被某 SDK 深层引入的老旧 guzzlehttp/psr7 v1.x —— 它可能根本不出现在 composer show 列表里,得靠 composer depends guzzlehttp/psr7 往上翻三级依赖链才能定位。










