Composer项目安全需强制执行四条关键措施:CI/CD中运行composer audit --no-dev --strict;allow-plugins须显式声明必要插件;composer.lock必须提交至版本库;secure-http和ssl-verify不得禁用。

Composer 项目不加固,上线等于裸奔。 它不是“要不要做安全”,而是“漏掉哪一条,漏洞就从哪条进”。下面几条是真正影响部署和日常开发的关键动作,每条都对应真实踩过的坑。
composer audit 必须进 CI/CD 流水线
只在本地跑 composer audit 没用。CI/CD 阶段必须加入,且启用 --strict 参数,让有漏洞时构建直接失败。
- 没加
--strict:审计报告只是“打印出来”,没人看,漏洞照常上线 - 漏掉
--no-dev:开发依赖里的漏洞(比如过时的phpunit)也会触发告警,干扰判断;生产环境应只审计require中的包 - CI 脚本里建议写成:
composer audit --no-dev --strict || exit 1
allow-plugins 要显式声明,不能留空
Composer 2.2+ 默认禁止所有插件执行,除非你明确授权。但很多人配了 "*": true 或干脆不配,等于关掉这道门。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
-
"*": true是最危险的写法——任何插件都能运行任意代码 - 正确做法是只开必需的,例如:
"composer/installers": true、"phpstan/extension-installer": true - 如果项目不用插件,就写
"*": false,一劳永逸 - 检查当前配置:运行
composer config allow-plugins
composer.lock 不提交 = 依赖失控
只要 .gitignore 里有 composer.lock,或者有人忘了 git add composer.lock,整个团队的依赖版本就不一致。
- 现象:本地
composer install正常,CI 构建报错,线上行为异常 - 根本原因:没有
lock文件,install实际退化为update,自动选最新兼容版 - 验证方式:CI 脚本开头加一句
test -f composer.lock || (echo "ERROR: composer.lock missing" >&2; exit 1)
secure-http 和 ssl-verify 别碰默认值
禁用 HTTPS 或跳过证书校验,等于把包下载过程交给中间人。这不是“开发调试才用”,而是“开了就等于放弃传输安全”。
-
composer config secure-http false:强制允许 HTTP 仓库,已知被用于投毒攻击 -
composer config ssl-verify false:跳过 TLS 证书验证,攻击者可伪造 packagist.org 域名下发恶意包 - 若内网私仓确需 HTTP,应配合
repositories单独配置,而不是全局关掉secure-http
最容易被忽略的是:安全配置不是一次性的。每次 composer update 后,composer.lock 改了,composer.json 里新增了包,就得重新跑一遍 audit、确认 allow-plugins 是否仍合理、检查新包是否引入了废弃或高危依赖。它不是上线前点个按钮的事,而是嵌进每次依赖变更里的条件反射。

















