是的,Composer 2.2+ 默认启用 secure-http,所有元数据请求(如 packages.json)强制走 HTTPS;若配置 HTTP 镜像则报错拒绝降级,且仅换镜像源会跳过 signature 校验,真正安全需同时启用 secure-http、security.signature-verification 和可信 HTTPS 镜像代理元数据。

composer install 默认走 HTTPS 吗?
是的,Composer 2.2+ 默认启用 secure-http,所有对 packagist.org 和镜像源的元数据请求(如 packages.json)都强制走 HTTPS。但这个“默认安全”有个关键前提:你没手动关掉它,也没配置成 http:// 开头的镜像源。
常见错误现象:composer install 报错 The "http://packagist.phpcomposer.com" repository has a HTTP URL, but secure-http is enabled —— 这说明你配了个 HTTP 镜像,而 Composer 拒绝降级。
检查当前设置是否生效:
- 运行
composer config --global secure-http,应输出true - 运行
composer diagnose,确认输出中含secure-http: OK
为什么只换镜像源(如阿里云)还不够安全?
单纯执行 composer config --global repos.packagist composer https://mirrors.aliyun.com/composer/,会完全替换官方源,导致签名验证被跳过——因为国内镜像不提供 signature 字段,Composer 2.5+ 的包签名机制就失效了。
真正安全的组合是:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
-
composer config --global secure-http true(默认已开,别动) -
composer config --global security.signature-verification true(强制开启签名校验) -
composer config --global repos.packagist.type composer+composer config --global repos.packagist.url https://mirrors.aliyun.com/composer/(仅代理元数据,不绕过官方校验)
这样,packages.json 走镜像加速,而实际下载的 .zip 包仍由 Composer 从官方或带校验的 CDN 获取,并比对 signature 字段。
如何验证签名验证是否真在工作?
运行 composer show --security。如果输出里有 Signature verification: enabled,且底下列出的包显示 signed: yes,才算到位。注意:只有作者在 Packagist 上主动签名的包才受保护(比如 monolog/monolog 等主流包已支持)。
容易被忽略的点:
-
composer install不报错 ≠ 安全校验在运行;它默认只校验composer.lock中的 hash,而 hash 可被污染 - 私有仓库(如 Satis)必须自己配置
signing-key,否则security.signature-verification对它无效 -
composer audit不检查签名,它查的是 CVE 数据库,和签名验证是两套机制
哪些操作会悄悄关闭 HTTPS 或签名?
以下命令看似无害,实则破坏信任链:
-
composer config --global secure-http false→ 允许 HTTP 源,中间人可篡改元数据 -
composer config --global repos.packagist http://mirrors.aliyun.com/composer/→ 协议写成http://,触发降级或失败 - 在
composer.json里写错键名,比如"repositories": [{"type": "composer", "url": ""}]空 URL,会导致 fallback 到不安全行为
最稳妥的做法:不碰 secure-http,用 security.signature-verification true 显式打开签名,再配一个 HTTPS 镜像源作元数据代理——三者缺一不可。其他任何“加速优先”的配置,基本都在拿安全换速度。

















