Composer 默认强制 HTTPS 下载包,需启用 secure-http 全局配置、替换 composer.json 中所有 HTTP 仓库为 HTTPS、确认 Packagist 官方源为 HTTPS,并在 CI/CD 中显式升级 Composer 和校验配置。

Composer 默认会通过 HTTPS 协议下载包,但某些旧版本、自定义配置或镜像源可能退回到 HTTP,带来中间人攻击风险。要确保所有包源(包括 Packagist 和自定义仓库)强制走 HTTPS,需从全局配置和仓库定义两方面入手。
启用 Composer 的 secure-http 选项
这是最直接的强制 HTTPS 安全开关。该选项默认为 true(Composer 2.0+),但若被手动关闭或使用老旧版本,需显式开启:
- 运行命令:composer config -g secure-http true
- 该设置写入全局配置文件(
~/.composer/config.json或COMPOSER_HOME/config.json),影响所有项目 - 启用后,任何 HTTP 协议的仓库地址(如
http://packagist.org或自定义http://my-repo.com)将被拒绝加载,并报错HTTP repository is disabled
检查并替换非 HTTPS 的仓库配置
即使 secure-http 开启,若 composer.json 中显式声明了 HTTP 仓库,仍会触发失败。需主动清理:
- 打开项目根目录的
composer.json,检查repositories字段,将类似"url": "http://repo.example.com"改为"url": "https://repo.example.com" - 若使用国内镜像(如阿里云、腾讯云),确认其 HTTPS 地址有效,例如:
"https://mirrors.aliyun.com/composer/"(而非过时的 HTTP 地址) - 移除已弃用的 HTTP 镜像源,避免因重定向失效导致安装中断
验证 Packagist 主源是否安全
Packagist 官方源(https://packagist.org)本身只支持 HTTPS,但可通过以下方式确认未被意外覆盖:
- 运行 composer config --list | grep repositories 查看当前生效的仓库列表
- 若输出中出现
packagist.org对应的 URL 是http://开头,说明有配置覆盖(如某插件或脚本修改了源),需定位并修正 - 可临时执行 composer config -g repositories.packagist.org '{"type":"composer","url":"https://packagist.org"}' 恢复官方 HTTPS 源
CI/CD 环境与容器中的额外注意
在 Docker 构建或 CI 流水线中,容易因基础镜像含旧版 Composer 或预置配置而绕过 HTTPS:










