composer不校验本地路径或vcs依赖的代码,因其无元数据签名与预置校验和;仅对packagist远程包执行gpg元数据签名、sha1文件哈希及https传输三重验证。

Composer 本身不提供“代码签名”功能,它依赖的是元数据签名 + 文件校验和 + HTTPS 传输三重机制来实现零信任式安全验证。所谓“包签名”,实际是 Packagist 对 packages.json 等元数据文件的 GPG 签名,而 Composer 客户端在拉取时会校验该签名;同时每个包归档(.zip/.tar)附带 SHA1 校验和,下载后立即比对。没有私钥参与的“代码级签名”,也没有类似 npm 的 sign 命令或 npm pack --sign 流程。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
为什么 composer install 不校验你本地写的包代码?
Composer 的签名/校验机制只作用于远程仓库(如 Packagist)提供的元数据与归档文件,**不校验你本地 require 的路径型依赖("path": "../my-package")或 VCS 依赖("git@github.com:me/my-pkg")的源码内容**。这些场景下:
- 没有元数据签名可验
- 没有预计算的 SHA1 校验和嵌入 composer.lock
- Git commit hash 或本地路径完全由你控制,属于“信任边界内”行为
所以,如果你用 path 方式引入一个未发布到 Packagist 的包,composer install 不会、也无法执行任何签名验证——它只是硬链接或复制文件。
如何让私有仓库支持元数据签名验证?
Packagist.org 的元数据签名是封闭实现,不开放给私有仓库。但你可以通过以下方式逼近等效效果:
- 使用 Satis 或 Private Packagist(商业版)搭建私有仓库,它们支持仓库级 TLS 证书认证 + 客户端证书双向认证
- 在 composer.json 中为私有仓库显式配置 ssl.cafile,强制信任你的内部 CA:
{
"repositories": [
{
"type": "composer",
"url": "https://repo.internal.example.com",
"options": {
"ssl": {
"cafile": "/etc/ssl/certs/internal-ca.pem"
}
}
}
]
}
- 配合 CI/CD,在推送 tag 前自动生成并嵌入校验和到 packages.json,再用 Webhook 触发仓库更新——但这需要自己实现签名逻辑,Composer 客户端不会自动识别或校验你自定义的字段。composer audit 能发现什么?它和签名有关吗?
composer audit 查的是 CVE 数据库匹配,不是签名验证。它读取 composer.lock 中记录的包名+版本号,去比对官方维护的 security-advisories 列表(由 FriendsOfPHP 维护),输出已知漏洞提示。
- 它不检查文件是否被篡改(那是 SHA1 校验和的事)
- 它不验证包来源是否可信(那是元数据签名的事)
- 它甚至不联网校验远程签名——所有数据都来自本地缓存的 JSON 文件
所以即使你禁用了所有 HTTPS 验证("verify_peer": false),composer audit 仍能正常运行,只是结果可能过期。
真正容易被忽略的是:Packagist 的元数据签名只保护 packages.json,不保护具体某个 dist 包的 ZIP 文件内容——后者靠的是独立的 SHA1 校验和。这两层校验缺一不可,但它们由不同系统生成、在不同阶段验证。一旦你绕过其中一层(比如用 --ignore-platform-reqs 或自建镜像跳过元数据拉取),整个链条就断了。










