composer audit能识别FriendsOfPHP/security-advisories数据库已收录的CVE漏洞(如monolog反序列化、laravel SSRF),但不检测私有包、零日漏洞、配置错误、逻辑漏洞或系统依赖。

Composer 本身不带安全扫描能力,但官方维护的 security-advisories 数据库 + 第三方工具(主要是 composer audit)能有效识别已知漏洞。 直接运行 composer audit 是目前最轻量、最贴近开发流程的安全检查方式,无需额外配置即可覆盖主流 PHP 包漏洞。
composer audit 能查什么、不能查什么
它底层查询的是 https://github.com/FriendsOfPHP/security-advisories 这个由社区维护的公开数据库,只覆盖被报告并收录的已知 CVE 或高危问题(比如 monolog/monolog 的反序列化漏洞、guzzlehttp/guzzle 的 SSRF 风险等)。它不会做静态分析、不检测自定义代码逻辑缺陷、也不识别未被收录的 0day 或私有包风险。
常见误判场景包括:
- 项目依赖了某个有漏洞的旧版包,但实际代码中根本没调用危险函数(
audit仍会报) - 用了 fork 后修改过的私有包(比如
myorg/monolog),即使和原版完全一致,audit也无法匹配 - 某些 advisory 标注的受影响版本范围过宽(如
),而你用的是 <code>2.7.5且已打补丁,但工具无法感知
如何让 composer audit 生效(含 CI 场景)
确保你用的是 Composer 2.5+(composer --version 查看),低于此版本无 audit 命令。执行前建议先更新锁文件:composer update --lock,否则可能漏检新引入的传递依赖漏洞。
实操要点:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 本地快速扫描:
composer audit(默认只显示高危/严重级) - 查看全部等级(含中低危):
composer audit --format=json | jq '.'(需装jq) - CI 中失败即阻断:
composer audit --no-dev --strict(--strict让任何级别漏洞都返回非零退出码) - 跳过特定包(慎用):
composer audit --ignore=package/name,仅限临时绕过,必须同步登记原因
audit 报告里看到 CVE-2023-1234 怎么办
别急着升级——先确认是否真影响你。打开 composer show package/name 看当前安装版本,再对照 advisory 页面里的 affected versions 字段。很多 CVE 只影响特定子模块或特定调用路径。
升级策略优先级如下:
- 首选:升级到 advisory 明确标记为“fixed in”的最小版本(比如从
3.1.0升到3.2.1,而不是直接跳4.0.0) - 次选:如果无法升级(兼容性断裂),检查能否删掉对应功能,或用
composer require --dev roave/security-advisories:dev-master强制阻止安装已知漏洞版本(该包是白名单式约束) - 避免:手动 patch vendor 文件——下次
composer install就会被覆盖
真正容易被忽略的是 dev 依赖里的漏洞。默认 composer audit 会检查所有依赖,但 CI 脚本常加 --no-dev 来提速,结果把 phpunit 或 symfony/var-dumper 的漏洞漏掉了——这些包在测试环境加载,一样可能被用于反序列化攻击或信息泄露。










