唯一能验证vendor文件真实性的命令是verify-checksums --strict,需启用COMPOSER_EXPERIMENTAL=1,不加--strict时哈希不匹配仅警告且返回码为0;该命令逐包计算vendor/下实际文件SHA256并与composer.lock中dist.sha256比对,但跳过type为"package"或"path"的包,且不校验vendor/autoload.php。

verify-checksums --strict 是唯一能验 vendor 文件真实性的命令
它不是默认启用的功能,必须加 COMPOSER_EXPERIMENTAL=1 才能调用;不加 --strict 时哪怕哈希不匹配也只警告、返回码仍是 0,CI 会误判成功。这个命令逐包读取 vendor/ 目录下实际文件(排除 .git、tests/ 等非发布路径),归并字节流后算 SHA256,再跟 composer.lock 里对应包的 dist.sha256 字段比对。
常见失效场景包括:
-
type: "package"或type: "path"的包会被跳过,不会报错,但也不校验 - 私有源或老旧中文包没打 dist zip 包,
composer.lock里dist.sha256字段为空,verify-checksums直接忽略 - 镜像站替换了原始 dist 包但没同步哈希值——此时哈希匹配,内容却已非作者发布
composer install --verify 只校验下载包,不保 vendor 安全
composer install --verify 是唯一强制校验 dist 包完整性的开关,它在解压前比对每个下载包与 composer.lock 中的 dist.sha256;但一旦解压完成,它就不再管 vendor/ 里的文件是否被改过、删过、或被缓存污染复用。
关键限制:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 不兼容
--no-install或--dry-run,同时使用会报错 - 仍走本地缓存,但校验发生在解压前——所以即使缓存被污染,也能当场发现
- 如果镜像返回的 dist 包和 Packagist 官方不一致(比如打了补丁但没更新哈希),
--verify一定会失败,这不是 bug,而是安全机制在起作用
中文镜像配置不影响 verify-checksums 行为,但影响初始安装可信度
verify-checksums 只读 composer.lock 里的 dist.sha256,然后重新计算本地 vendor/{package}/ 目录的哈希值。你用的是 https://mirrors.aliyun.com/composer/ 还是官方源,对它的行为没影响——镜像只决定 install 阶段从哪下 zip,不影响后续校验依据。
但要注意:
- 如果镜像未同步原始 dist 包(比如自建源替换了代码却没更新
dist.sha256),那么composer install --verify就会失败,而verify-checksums却可能“侥幸通过”——因为 lock 文件里记的是镜像自己算的哈希 - 验证镜像是否透传原始哈希:对比同一包在官方源和镜像源的
composer.lock中dist.url和dist.sha256是否一致;手动下载两个源的 dist zip 包,运行shasum -a 256 *.zip看是否相同
vendor/autoload.php 被篡改,所有 Composer 校验命令都无感
verify-checksums 完全不校验 vendor/autoload.php——它是 Composer 安装时生成的引导文件,内容固定为 require_once __DIR__ . '/composer/autoload_real.php';,哪怕被替换成 eval($_GET['x']),所有校验命令都无感。
生产环境唯一有效防护:
- 部署后立即执行:
chmod -R a-w vendor/ - CI 中加断言:
grep -q "autoload_real\.php" vendor/autoload.php || exit 1 - 注意:
composer dump-autoload不校验它,也不重写它;它只读vendor/composer/autoload_real.php并重新生成映射文件
composer install --verify + COMPOSER_EXPERIMENTAL=1 composer verify-checksums --strict,但前提是 composer.lock 由可信流程生成,且镜像源严格透传原始哈希。否则,vendor/autoload.php 和 type: "package" 类包这两处盲区,永远无法靠 Composer 自身命令覆盖。

















