composer install --audit 仅为安装后自动触发 audit 的快捷方式,不改变其逻辑且受三前提限制;它默认返回非零退出码、不支持 audit 参数、无结构化输出,真正安全卡点需手动执行带参数的 composer audit。

composer install --audit 不是独立安全扫描
它只是在依赖安装完成后,自动触发一次 composer audit,不改变 audit 本身的逻辑和限制。如果你的项目没满足 audit 的三前提(Composer ≥2.5.0、experimental.audit 全局启用、存在有效 composer.lock),加了 --audit 也静默跳过,不会报错,更不会阻断安装。
--audit 的退出码行为容易误导构建策略
默认情况下,composer install --audit 只要 audit 发现任意一条 advisory(哪怕 low 级别或已废弃包提示),整个 install 命令就返回非零退出码——这会直接中断 CI 流程,但你可能根本没打算用它卡点。
- 它不支持传参给背后的 audit,比如你没法写
composer install --audit --severity=critical - 想精准控制,必须拆成两步:
composer install --no-interaction+composer audit --severity=critical,high --no-dev --format=json - CI 中若只依赖
--audit,很可能因一条五年前提过的low漏洞导致构建失败,而真实风险为零
它无法替代显式 audit 调用的结构化输出能力
composer install --audit 默认只输出表格格式,没有 --format=json、--fixed、--ignore 这些关键参数,也就没法做机器解析、版本比对或漏洞忽略。CI 流水线里真正落地门禁,靠的是后面单独跑的 composer audit 命令。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 表格输出无法被
jq提取字段,也不能塞进安全平台做归档 - 不带
--fixed,你就看不到“升到哪个版本能修”,只能看到“有漏洞” - 不带
--no-dev,开发依赖(如phpunit/php-code-coverage)里的 yaml 解析器漏洞也会触发误报
真正起效的安全卡点必须绕过 --audit 参数
生产环境的可靠做法是:先确保 composer install --no-interaction --prefer-dist 成功生成/校验 composer.lock,再执行带参数的 composer audit。这个组合才能覆盖全链路依赖、限定严重等级、输出可解析结果。
-
--with-dependencies必须显式加上,否则像symfony/yaml这类被phpunit间接引入的包不会被扫到 -
--timeout=30推荐加上,避免因 Packagist 安全数据库响应慢导致 CI 卡住 - 如果用了私有镜像源,需确认其同步了
security-advisories数据,否则Could not fetch advisories会静默失败
别把 --audit 当成安全开关——它只是个快捷方式,真正的控制权在你手动调用的 composer audit 命令里,参数、上下文、退出逻辑,全都得自己攥着。










