composer install不报vendor被改,因其仅在下载时校验lock中dist.sha256与压缩包哈希,不运行时重算文件内容;手动修改vendor后无感知,需用sha256sum生成快照并排除autoload_*.php等自动生成文件,部署后比对校验。

私有仓库本身不防篡改,vendor 目录被手动修改后 Composer 完全无感——它只在校验阶段比对 lock 文件里的哈希,不运行时重算、不扫描文件内容。
为什么 composer install 不报 vendor 文件被改过
Composer 的 dist.sha256 校验仅发生在下载并解压 ZIP/TAR 包的那一刻,且只校验压缩包字节一致性。一旦文件落地到 vendor/,后续任何 composer install 或 composer update 都不会重新计算每个 PHP 文件的哈希值。
- 你删掉
monolog/monolog/src/Logger.php里一行代码,composer install照常通过 -
composer diagnose不检查vendor/内容,只查配置和网络连通性 -
--force-install会重装,但代价高、不可控,不能作为常规校验手段 - 自动生成文件如
vendor/composer/autoload_static.php本就会变,必须从校验中排除
如何用 sha256sum 建立可落地的本地快照校验
最轻量、跨平台、不依赖 Composer 插件的方案:用系统级工具生成并比对文件哈希清单。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 生成快照(排除自动生成文件):
find vendor/ -type f -name "*.php" ! -path "vendor/composer/autoload_*.php" ! -path "vendor/bin/*" -print0 | xargs -0 sha256sum > vendor.sha256
- 部署后校验:
sha256sum -c vendor.sha256 2>&1 | grep -v ": OK$"
(只输出失败项) - 把
vendor.sha256提交进 Git,但不要提交vendor/目录本身 - CI 流水线中加入该命令,失败即中断发布
私有仓库元数据签名必须显式启用,否则形同虚设
私有 Satis 或 Private Packagist 仓库默认不带 GPG 签名,composer install 也不会主动验证——你得自己配、自己签、自己验。
- Satis 构建时加
--sign参数,并确保archive.format启用(如"zip") - 客户端需配置公钥:
composer config --global signing-key /path/to/your-repo.pub - 检查是否生效:
composer show --security输出中要有Signature verification: enabled - 若使用
"type": "vcs"直连 Git,Composer 不自动验签,得手动git tag -v v1.2.0验证 GPG 签名
镜像源配置错误会直接绕过所有校验链
把私有仓库 URL 写成 "type": "composer" 或漏掉 "type": "packagist",会导致元数据请求走非标准路径,signature 字段丢失,签名验证静默失效。
- 私有仓必须是首位且类型明确:
{"type":"vcs","url":"https://gitlab.internal/utils"} - 镜像源必须声明
"type":"packagist",不能只换 URL;否则 Composer 当作普通 composer 源处理,跳过 signature 解析 -
composer diagnose显示secure-http: OK≠signature verification: OK,后者才是关键 - 如果
composer.lock里某个包的dist.sha256被人工篡改为空,verify-checksums --strict会直接跳过,不报错也不警告
真正防住篡改的关键不在「有没有校验」,而在「谁在什么时候校验、校验什么、校验失败是否阻断流程」——快照要定期更新,签名要服务端签+客户端验,镜像配置不能图省事漏 type,每一步漏掉都会让整条链失效。










