composer-sig 是指通过 GPG 签名验证 Composer 包完整性的安全实践,主流实现为 roave/composer-gpg-plugin,可全局安装并配置在 post-install-cmd 和 post-update-cmd 中自动校验依赖签名,确保包来自可信发布者且未被篡改;开发者可通过 git tag -s 对版本签名,配合可信镜像源与 composer.lock 文件管理,提升项目安全性。

在使用 Composer 管理 php 项目依赖时,确保第三方包未被篡改至关重要。尽管 Packagist 提供了官方仓库,但中间环节(如网络传输、镜像源)仍可能存在风险。为了增强安全性,可以使用 composer-sig 工具验证已安装的 Composer 包是否被篡改。
什么是 composer-sig?
composer-sig 是一个用于验证 Composer 安装的依赖包完整性和来源真实性的工具。它通过数字签名机制,确认每个包确实来自声称的发布者,并且在传输过程中未被修改。
安装 composer-sig
你需要先全局安装该工具:
composer global require roave/composer-gpg-plugin
或者使用专门用于签名验证的工具(目前社区主流为基于 GPG 的方案)。注意:composer-sig 并非 Composer 内建命令,而是指一类安全扩展实践,常见实现是 roave/composer-gpg-plugin 或手动校验流程。
启用 GPG 签名验证(推荐方式)
目前最可行的方法是使用 roave/composer-gpg-plugin 实现自动签名检查:
- 项目中添加插件支持:
composer require --dev roave/composer-gpg-plugin - 配置
composer.json启用签名验证:
"scripts": { "post-install-cmd": [ "@php -r 'echo "Verifying package signatures...n";'", "RoaveComposerGpgSignatureVerifier::verify" ], "post-update-cmd": [ "@php -r 'echo "Verifying package signatures after update...n";'", "RoaveComposerGpgSignatureVerifier::verify" ] }
该插件会在每次安装或更新后尝试验证包的 GPG 签名,前提是维护者已签署其发布版本。
手动验证包完整性(基础方法)
若无签名支持,可通过以下方式辅助判断是否被篡改:
- 检查
composer.lock是否受版本控制,防止意外变更。 - 定期运行
composer install并观察文件变化。 - 结合 CI 环境锁定依赖,避免生产环境直接拉取远程包。
- 使用可信镜像源(如官方 Packagist),避免不可信代理。
开发者如何签署自己的包?
如果你是库作者,建议对发布版本进行 GPG 签名:
- 生成强 GPG 密钥:
gpg --gen-key - 发布前签名 git tag:
git tag -s v1.0.0 -m "Release version 1.0.0" - 推送到 Packagist 的标签需为 signed tag,部分工具可据此验证来源。
基本上就这些。虽然 Composer 生态尚未全面普及运行时包签名验证,但通过合理配置和开发规范,能显著降低依赖被篡改的风险。安全重在预防,从 lock 文件管理到签名机制,每一步都值得重视。
以上就是如何验证已安装的Composer依赖是否被篡改_使用 composer-sig 验证包的签名的详细内容,更多请关注php中文网其它相关文章!