Composer数据校验分三层:composer validate校验JSON语法与字段语义(需--strict才报错),verify-checksums --strict校验vendor文件哈希完整性,composer audit扫描composer.lock中已知安全漏洞;各命令时机、对象、失败后果不同,缺一不可。

Composer 的数据校验不是单一命令能覆盖的,它分三层:JSON 语法、字段语义、文件完整性——每层用不同命令、不同时机、不同失败后果,混用或漏用都会让你误以为“校验通过”而实际已埋雷。
composer validate 只管 JSON 写得对不对
它不联网、不查 Packagist、不验证 autoload 路径是否存在,只做两件事:解析 JSON 语法 +(加 --strict 后)检查字段是否合法。
- 报
JSON parse error时,错误信息里写的line 12 at column 5就是真实位置,直接跳过去盯三类问题:末尾多逗号、单引号代替双引号、BOM 或零宽空格 - 不加
--strict时,"autoloader": {}(拼错autoload)、"type": "libary"(拼错)、缺"description"都只警告,CI 中必须加 - CI 推荐固定用:
composer validate --strict --no-check-publish,跳过 Packagist 发布检查,避免网络中断流程
composer audit 只扫已 lock 的已知漏洞
它读 composer.lock,比对 FriendsOfPHP/security-advisories 数据库,仅识别已收录的 CVE,不是静态分析器,也不管私有包或零日漏洞。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 默认跳过
require-dev下的包(如phpunit/phpunit),CI 中必须加--dev - 必须先确保
composer install成功生成/更新了composer.lock,否则报Could not find composer.lock - 老版本 Composer(composer config --global experimental.audit true
- 想落地执行,加
--format=json解析advisories_count字段,或加--fixed直接看修复版本
verify-checksums --strict 才真校验 vendor 文件是否被篡改
这是唯一能打开 vendor/ 目录、逐文件读字节、重新算 SHA256 并和 composer.lock 中 dist.sha256 比对的命令——但默认不可用,且极易被忽略关键限制。
- 必须启用实验模式:
COMPOSER_EXPERIMENTAL=1 composer verify-checksums --strict,不加--strict即使发现 mismatch 也只警告、返回 0 - 跳过
type: "path"包、无dist.sha256字段的包(如老旧私有包),不会报错,容易漏检 - 不校验
vendor/composer/autoload_*.php这类生成文件,但会扫描并失败于你手动改过的vendor/autoload.php(它没哈希记录) -
composer install只校验下载包解压前哈希;verify-checksums校验的是解压后磁盘上真实文件——二者对象和时机完全不同
最危险的是:autoload.php 等关键引导文件完全游离在校验体系外,被注入恶意代码时 Composer 无法感知;生产部署前必须设 vendor 为只读,并单独断言这些文件未被篡改。

















