必须启用 secure-http 并显式配置可信镜像源,否则 Composer 会静默降级到 HTTP,下载过程完全不校验完整性,包可能被中间人篡改;secure-http 默认开启但仅当明确设为 true 才强制执行,未配置时容忍 HTTP 源导致签名和哈希校验形同虚设。

必须启用 secure-http 并显式配置可信镜像源,否则 Composer 会静默降级到 HTTP,下载过程完全不校验完整性,包可能被中间人篡改。
为什么 secure-http 默认不生效
Composer 2.0+ 默认开启 secure-http,但仅当 composer.json 或全局配置中明确设为 true 才强制执行。如果项目没配、又没设全局策略,它会容忍 HTTP 源(比如私有仓库或老旧镜像),此时 composer install 可能从明文通道拉取 dist 包,签名和哈希校验形同虚设。
常见错误现象:
- 执行
composer install时控制台输出Downloading http://...(注意是http不是https) - CI 构建日志里出现
Failed to verify signature或直接跳过验证步骤 - 本地能装,CI 报
Invalid package information—— 因为 CI 环境更严格,触发了默认安全策略
正确做法:
- 全局启用(推荐):
composer config -g secure-http true - 项目级锁定:
composer config secure-http true(写入项目composer.json的config字段) - 验证是否生效:
composer config --list | grep secure-http,确认值为true
镜像源必须用 HTTPS 且来自可信域名
即使启用了 secure-http,若镜像源本身是 HTTP 或证书不可信(如自建镜像未配有效证书),Composer 仍会拒绝连接或回退到不安全模式。
国内常用可信镜像源(截至 2026 年):
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 阿里云:
https://mirrors.aliyun.com/composer/ - 腾讯云:
https://mirrors.cloud.tencent.com/composer/ - 华为云:
https://repo.huaweicloud.com/composer/
配置方式(任选其一):
- 全局设置:
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ - 项目级设置:
composer config repo.packagist composer https://mirrors.aliyun.com/composer/ - 手动编辑
composer.json的repositories字段(注意 type 必须为composer)
⚠️ 容易踩的坑:
- 误用
packagist.org的 HTTP 镜像(如过期的http://packagist.phpcomposer.com),该域名已停用且无有效证书 - 在 Docker 构建中用
RUN composer config --global,但后续composer install在另一层执行,环境变量未继承 - 公司内网镜像用自签名证书,却没配
composer cafile或禁用 SSL 验证(后者绝对禁止)
composer audit 是唯一能主动发现漏洞的手段
composer audit 不依赖网络实时扫描,而是比对 composer.lock 中记录的每个包版本与官方安全咨询库(Security Advisory Database)。它不检查代码内容,只核对已知 CVE 和废弃状态。
关键使用要点:
- 必须在
composer install后执行,否则审计的是旧 lock 文件 - CI 中应加
--fail-on-warnings,中危及以上直接中断构建 - 输出 JSON 格式便于解析:
composer audit --format=json | jq '.advisories[] | select(.severity == "critical")' - 不能替代 SCA 工具,但它是 Composer 原生、零配置、必跑的第一道防线
注意:roave/security-advisories 必须放在 require-dev,它只在 install/update 阶段做冲突拦截,放错位置会导致生产环境安装失败。
真正安全的连接不是“能连上”,而是每一步都强制校验:源地址协议、证书有效性、包签名、漏洞状态。少一个环节,就等于把钥匙交给了中间人。最常被忽略的是镜像源证书和 audit 的 CI 集成——它们不报错,但会让整个安全链条失效。

















