
Composer 默认不强制限制源,只要 composer.json 里写了任意 repositories,它就会跳过 packagist.org 的索引校验——哪怕你只加了一行空配置,整个依赖链就失去官方可信锚点。
如何确认当前是否已脱离官方源校验
Composer 是否还在走 packagist.org 官方验证,不看镜像地址,而看它是否还校验 packages.json 签名。最直接的判断方式是运行:
composer diagnose
检查输出中是否有这两行:
secure-http: OKsignature verification: OK
如果其中任一为 FAIL 或缺失,说明签名验证已失效。常见原因包括:
- 手动执行过
composer config --global repo.packagist composer http://...(协议为http) - 配置了非阿里云/腾讯云等支持签名转发的镜像(如已停更的
https://packagist.laravel-china.org) - 设置了
COMPOSER_REPO_PACKAGIST环境变量覆盖默认源 -
composer.json中存在repositories字段(哪怕值为空或 type 为package)
清空自定义源并重置为纯官方通道
只要 repositories 字段存在,Composer 就不再检查包是否在 packagist.org 注册过——这是供应链投毒最常利用的逻辑缺口。必须彻底清除:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 删掉项目
composer.json中的repositories字段(包括"type": "vcs"、"type": "package"等所有变体) - 运行
composer config --global repo.packagist false彻底禁用全局自定义源 - 再显式加回带签名能力的官方源:
composer config --global repo.packagist '{"type": "composer", "url": "https://packagist.org"}' - 确认环境变量未干扰:
unset COMPOSER_REPO_PACKAGIST(Linux/macOS)或set COMPOSER_REPO_PACKAGIST=(Windows)
做完后 composer show --all | head -n5 应显示来源为 packagist.org,且 composer install --dry-run 不报任何源相关警告。
启用签名验证并锁定插件白名单
仅靠 HTTPS 不够,2.5+ 版本必须开启元数据签名验证才能防篡改:
- 运行
composer config --global security.signature true(注意不是secure-http) - 设置
allow-plugins为显式白名单,禁止通配:"allow-plugins": {"symfony/flex": true, "laravel/pint": true},绝不能设为true或{"*": true} - 生产部署必须加
--no-plugins:例如composer install --no-plugins --no-dev --prefer-dist - CI 流程中加
composer clear-cache后再装,避免本地缓存绕过校验
此时若某个包的 dist.shasum 缺失或校验失败,composer install 会直接中断,而不是静默跳过。
为什么镜像源 ≠ 安全源
很多团队误以为换国内镜像就等于“安全加速”,但实际风险恰恰在此:镜像站若未同步 packagist.org 的 X-Content-Signature 响应头,Composer 就自动 fallback 到无签名模式。阿里云镜像(https://mirrors.aliyun.com/composer/)目前支持签名转发,但腾讯云、华为云等尚未公开确认。因此更稳妥的做法是:
- 不替换
repo.packagist,只用repos.packagist.url配置元数据代理(Composer 2.2+ 支持) - 保持
dist.url仍由 packagist.org 提供,确保 ZIP 下载走带 SHA256 校验的官方分发链 - 永远不要信任
http://镜像,哪怕它声称“内网可用”——secure-http = true被绕过时,中间人可注入任意代码
真正起作用的安全边界,从来不是“下载快不快”,而是“元数据有没有被篡改过”。这点一旦松动,composer.lock 的哈希保护也会形同虚设。










