verify-checksums --strict 是唯一能回检 vendor 文件完整性的命令,需启用 composer_experimental=1 且必须加 --strict 才中断流程;它逐包计算 vendor 目录实际文件 sha256 并与 composer.lock 中 dist.sha256 比对,跳过无该字段或 type 为 package/path 的包,不校验 autoload.php 等生成文件。

Composer 的哈希校验不是“开了就安全”,而是只在特定路径下触发、只对特定包类型生效、且极易被配置绕过。你得亲手验证它是否真在工作,而不是依赖默认行为。
怎么确认 dist.shasum 正在真实参与校验
很多项目 composer.lock 里有 shasum 字段,但安装时根本没比对——因为字段为空、长度不对,或压根没走 dist 路径。
- 打开
composer.lock,搜索"dist": {,找到任意一个包,确认存在非空"shasum": "a1b2c3..."字段;长度必须是 64 字符(SHA-256),40 字符(SHA-1)已不推荐,新版 Composer ≥2.2 默认优先用 SHA-256 - 运行
composer install -v,观察输出:若出现Downloading https://...+Extracting archive,说明走了 dist 路径、校验启用;若看到Cloning,说明用了--prefer-source,shasum完全被忽略 - 临时改一个包的
shasum值为"0000"(确保是 64 字符),再运行composer install—— 必须报Signature mismatch或Hash does not match;不报错,说明校验逻辑未激活(可能用了--ignore-platform-reqs或全局配置了preferred-install)
composer verify-checksums --strict 为什么总报 command not found
这个命令不是默认可用的,也不是版本升级后自动解锁的——它强制依赖环境变量,漏掉就失效。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 必须每次执行都带上:
COMPOSER_EXPERIMENTAL=1 composer verify-checksums --strict;直接运行composer verify-checksums --strict会提示Command "verify-checksums" is not defined -
--strict是关键:不加它,即使校验失败也只输出警告、返回码仍是 0,CI 流水线无法捕获异常 - 它只校验 dist 安装的包(zip/tar),source 安装(git clone)的包直接跳过,不会提示也不会报错
- 排除路径固定:
.git/、tests/、vendor/bin/等非发布内容不参与哈希计算,和 lock 文件中记录逻辑一致
手动比对 dist.url 和本地 zip 的 SHA-256 容易踩哪些坑
自己下载、自己算哈希看似最可靠,但三处细节错一点,结果就失去意义。
-
dist.url必须和 lock 文件里完全一致——国内镜像源常替换 URL,但没同步更新 hash,导致比对“成功”却内容不一致 - 下载必须加
-L(follow redirect):curl -L -o package.zip "https://...",否则可能拿到 302 响应体而非真实 zip,哈希必然不匹配 - 解压后不能简单
sha256sum *:要按 Composer 实际校验逻辑来,排除.git/、tests/、vendor/bin/等目录,且注意文件权限、换行符等平台差异影响哈希值
为什么 composer install 成功不代表 vendor 安全
校验只发生在下载解压那一刻,之后 vendor 目录被手动改写、CI 机器残留旧文件、缓存 zip 被污染,都不会触发回检。
-
vendor/autoload.php被你改了一行,composer install仍成功——这不是校验失效,而是校验压根没覆盖已解压文件 - 真正能回检 vendor 文件完整性的唯一内置命令是
COMPOSER_EXPERIMENTAL=1 composer verify-checksums --strict,但它不校验 source 包,也不检查autoload.php这类被 Composer 自动写入的文件 - 更隐蔽的风险来自缓存:
~/.composer/cache/files/下的 zip 若被篡改,Composer 复用它而不重新下载,自然跳过哈希比对










