Composer 2.2+ 默认启用安全告警,需确保 notify-on-security-advisories=true;日常用 composer audit(2.5+)检查漏洞,CI 中建议 composer audit --severity=high,critical 分级拦截。

composer install/update 时怎么自动检查已知漏洞
Composer 本身不内置实时安全扫描,但 composer install 和 composer update 默认会调用 Packagist 的安全告警接口(security-advisories 数据库),只要你的项目启用了该功能,就会在终端输出类似 Warning: The lock file is not up to date with the latest changes in composer.json 后附带安全提示。
关键前提是:你得用的是官方 Composer 2.2+,且没禁用 notify-on-security-advisories。老版本或自定义安装的二进制可能跳过这步。
- 确认是否启用:
composer config --global notify-on-security-advisories返回true才有效 - 如果返回空或
false,执行composer config --global notify-on-security-advisories true - 注意:这个检查只在本地运行命令时触发,CI/CD 或生产环境部署不会自动报警 —— 它不是守护进程,也不轮询
- 某些私有仓库或镜像源(如阿里云、腾讯云 Composer 镜像)会缓存或忽略安全元数据,导致漏报;建议核心项目直连
https://packagist.org
怎么手动查某个包有没有已知 CVE 或安全公告
别等 CI 报错,日常维护时快速验证一个包是否“带伤上线”,最稳的方式是直接查 Packagist 官方安全数据库,而不是翻 GitHub Issues 或第三方扫描器。
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
Packagist 提供了公开 API:https://security.sensiolabs.org/check_lock,它接受 composer.lock 文件内容做 POST 请求,返回 JSON 格式的风险列表。但更轻量的做法是用 Composer 自带命令:
- 运行
composer audit(Composer 2.5+),它会读取当前composer.lock并比对最新安全通告 - 加
--format=json可用于脚本解析,比如composer audit --format=json | jq '.advisories' - 如果提示
Command "audit" is not defined,说明版本太低 —— 升级到 2.5+ 再用,别试图用composer show --outdated替代,它只看版本号,不看漏洞 - 注意:
composer audit不会检测 dev 依赖里的漏洞(除非显式加--with-dev),而很多项目把测试工具放require-dev,比如phpunit的反序列化漏洞就常被忽略
为什么 vendor/bin/local-php-security-checker 不推荐用
这个工具曾流行一时,但它依赖本地维护的 CVE 数据库,更新滞后、覆盖不全,且早已停止维护。现在跑起来大概率报 cURL error 60: SSL certificate problem 或直接返回空结果。
- 它的数据源是
https://security.sensiolabs.org,该域名已于 2023 年底下线,重定向到 Packagist 新审计服务,但旧版工具没适配 - 替代方案只有两个:用
composer audit(推荐),或接入 Snyk / GitHub Dependabot(需配置仓库权限) - 如果你在 Dockerfile 里还写着
RUN curl -sS https://getcomposer.org/installer | php && mv composer.phar /usr/local/bin/composer,请确认下载的是最新稳定版 —— 旧 installer 装出来的可能是 2.1.x,不支持audit - 顺带一提:
composer outdated --direct看的是语义化版本兼容性,和漏洞无关;别把它当安全检查用
GitHub Actions 里怎么加自动安全检查环节
CI 中加一步 composer audit 很简单,但容易因网络抖动或临时不可达失败,导致 PR 卡住。得设好超时和容错逻辑。
- 用官方 PHP action,确保 Composer 版本 ≥2.5:
composer self-update --2必须放在composer install前 - 命令写成:
composer audit --no-dev || echo "Security audit failed, check manually"—— 加||是为了不让整个 job 因审计失败中断,毕竟有些低危漏洞可延后处理 - 如果想严格拦截高危项,改用:
composer audit --no-dev --severity=high,critical,它只报 high/critical 级别,返回非零码时 CI 才失败 - 注意:GitHub Actions 默认不缓存
composer.lock变更后的审计结果,每次都会重新查远程,所以别在cache步骤里 excludevendor/就以为省事 ——audit不依赖 vendor,只读 lock 文件
notify-on-security-advisories 就万事大吉,其实它只在你敲命令那刻提醒一次,之后就静音了。

















