composer audit是唯一官方内置的安全检查方式,需≥2.5.0版本,基于composer.lock比对packagist安全数据库,支持--no-dev、--severity=high,critical等参数,不实时监控,仅静态触发,ci中需配合超时、官方源及json解析确保可靠。

Composer 本身不提供“实时监控”能力,插件也无法在后台常驻监听漏洞——所谓“监控”,实际是借 install/update 或 audit 命令触发的静态检查。真要落地,得靠组合策略,不是装个插件就完事。
composer audit 是唯一靠谱的内置安全检查方式
它直接读取 composer.lock,比对 Packagist 官方维护的 security-advisories 数据库(即 FriendsOfPHP/security-advisories),不联网也能跑(缓存存在本地),结果可复现、CI 友好。
- 必须用 Composer ≥ 2.5.0:
composer --version确认,旧版会报Command "audit" is not defined;升级用composer self-update - 它只检查
vendor/里真实安装的包,不看composer.json里写的版本——改了 JSON 没install,audit 就看不到风险 - 默认不查
require-dev,生产环境评估建议加--no-dev;若 CI 需覆盖测试工具链漏洞,显式加--with-dev - 输出无颜色或没报错 ≠ 安全:低危(
low)和中危(medium)默认不中断命令,但--severity=high,critical可强制卡点
roave/security-advisories 不是扫描器,而是安装拦截器
它本质是个“虚拟约束包”,通过 conflict 规则让 composer install 或 update 在解析阶段失败,从而阻止危险版本进入 vendor/。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 必须作为 dev 依赖安装:
composer require --dev roave/security-advisories:dev-latest;global安装完全无效 - 它不生成报告、不提示修复方案,只报类似
Conclusion: don't install symfony/http-foundation v5.4.0的错误;定位根因用composer why-not symfony/http-foundation:v5.4.0 - 对 fork 包或私有仓库支持差:如果上游没打对应安全标签(如
v5.4.33),它拦不住;镜像源若未同步security-advisories元数据,也会失效 - 不能替代
audit:它防“新装”,audit 查“已装”,两者互补,缺一不可
别碰已废弃的安全插件
诸如 composer/composer-security-checker、security-checker 这类工具,早在 2021 年就停止维护,与 Composer 2.x 不兼容,且调用的是已下线的远程接口。
-
composer require --dev roave/security-advisories:dev-master是无效写法,应始终用dev-latest - 任何宣称“自动轮询漏洞库”“后台守护进程”的 Composer 插件,都是误导——Composer 没有 daemon 模式,所有操作都是一次性 CLI 调用
- 第三方 SCA 工具(如
snyk test)需上传composer.lock,私有项目务必确认合规策略;它查得更广,但和audit数据源不同,不能互相替代
CI 中真正能卡住高危漏洞的最小配置
流水线里光跑 composer audit 容易误伤(比如报一堆 low 级别),也容易漏(网络超时、镜像源没安全数据)。可靠做法是限定行为 + 显式兜底。
- 先确保直连官方源:
composer config --global repo.packagist.org composer https://packagist.org - 加超时和非交互模式:
composer audit --no-interaction --timeout=30 --severity=high --severity=critical - 若用镜像源(如阿里云),必须确认其支持
/advisories接口;否则 fallback 到官方源,或放弃镜像 - 审计失败后,别只看终端红字——用
composer audit --format=json提取cve和link字段,人工核验是否真影响你的使用路径
最常被忽略的一点:composer.lock 文件本身是否可信。如果它是手动复制、git checkout 或 CI 缓存污染来的,audit 结果就不可信——所有检查都基于这个文件的哈希与版本号,它错了,整个安全链条就断了。










