必须显式启用 security.signature-verification 才能校验包签名,否则 composer 仅比对已被污染的 lock 文件哈希;该配置需全局设置且依赖 ≥2.5 版本,配合 secure-http true 和正确镜像配置才生效。

必须显式开启 security.signature-verification,否则 Composer 默认不校验包签名,composer install 仅比对 composer.lock 中的哈希值——而 lock 文件本身可能已被污染。
为什么 composer install 默认不验证签名
Composer 2.5+ 才默认启用签名验证机制,但该功能不是“开箱即用”,而是依赖配置项触发。低于 2.5 的版本压根不识别 security.signature-verification,执行 composer config -g security.signature-verification true 会报错 Unknown configuration setting "security.signature-verification"。
即使版本达标,若未全局启用,项目仍走无签名校验路径——因为签名验证是全局开关,不能靠项目级 composer.json 控制。
- 运行
composer --version确认 ≥ 2.5 - 执行
composer config -g security.signature-verification true(必须带-g) - 验证是否生效:
composer show --security输出中需含Signature verification: enabled
secure-http 和 security.signature 是两回事
secure-http 控制是否允许非 HTTPS 源(如 http:// 镜像),它只影响连接层;而 security.signature(或 security.signature-verification)控制是否校验 Packagist 官方返回的 signature 字段,这是信任链的核心。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
常见错误是只配了 secure-http true 就以为安全了——其实它连签名验证的边都没碰到。
-
secure-http true是前提:确保元数据请求走 HTTPS,防止中间人篡改packages.json -
security.signature-verification true是关键:让 Composer 拒绝安装任何未被 Packagist 官方签名的包(前提是包作者启用了 signed packages) - 二者缺一不可,且都必须全局配置:
composer config -g secure-http true+composer config -g security.signature-verification true
镜像源配置不当会直接废掉签名验证
用 composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ 这种方式完全替换官方源,会导致 Composer 自动跳过签名检查——因为阿里云等镜像不提供 signature 字段,Composer 检测到缺失后 fallback 到无校验模式。
真正安全的做法是保留官方源,仅将元数据请求代理到 HTTPS 镜像:
- 先删掉旧的错误配置:
composer config -g --unset repos.packagist - 再设可信镜像(仅代理元数据):
composer config -g repos.packagist.type composer,然后composer config -g repos.packagist.url https://mirrors.aliyun.com/composer/ - 最后确认:
composer diagnose应同时显示secure-http: OK和signature verification: OK
签名验证只对 Packagist.org 上托管、且作者主动启用「signed packages」的包生效;私有仓库需自行部署签名策略,security.signature-verification 对它们无效。别指望开了这个开关就能防住所有供应链攻击——它只是最基础的一环,且高度依赖上游配合。










