composer install --no-scripts --no-plugins 是唯一官方支持的禁用所有脚本及插件钩子的方式,必须同时使用二者:--no-scripts 关闭 composer.json 中所有 scripts 钩子,--no-plugins 跳过插件加载(包括可绕过 scripts 的插件如 symfony/flex),缺一不可;参数须紧贴命令名后,且建议配合清空 scripts 字段与签名验证等源头管控措施。

composer install --no-scripts --no-plugins 必须同时用
只加 --no-scripts 不够,只加 --no-plugins 也不行。某些插件(比如 symfony/flex)会绕过 scripts 字段,直接在安装阶段注入钩子;而你项目自己的 composer.json 里写的 post-install-cmd,--no-plugins 并不拦得住。
真正生效的组合是:
composer install --no-scripts --no-pluginscomposer update --no-scripts --no-plugins --no-interaction
参数必须紧贴命令名后:composer install --no-scripts --no-plugins ✅,composer --no-scripts install ❌(等价于 composer --help)。
清空 scripts 字段比依赖参数更可靠
命令行参数容易漏,尤其 CI 配置不一致或本地开发时手滑。最稳妥的做法是在 composer.json 中把 scripts 设为空数组:
"scripts": {
"post-install-cmd": [],
"post-update-cmd": [],
"pre-autoload-dump": [],
"post-autoload-dump": []
}
注意:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 不能用
null或false,Composer 会忽略并回退到默认行为 - 清空后
post-autoload-dump不再触发,Laravel 等框架需手动补composer dump-autoload --optimize - 若仅需保留某一个钩子(如构建前端资源),只留那一个,并检查其是否含
exec、shell_exec、system等调用
警惕 allow-plugins 的 false 安全感
"allow-plugins": true 是高危配置,它完全绕过白名单机制,让所有包(包括传递依赖)无需校验即可加载插件——等于把构建期控制权交给整个 Packagist。
正确做法是:
- 设为
false或显式白名单:"allow-plugins": { "laravel/pint": true, "phpstan/extension-installer": true } - CI 中仍要加
--no-plugins,防止白名单被绕过或配置未生效 - 验证是否真禁用:检查
vendor/composer/autoload_plugins.php是否为空,或运行composer diagnose --verbose搜索Loading plugin
签名验证和来源锁定才是底层防线
脚本禁用只是拦截执行,真正防住恶意包得从源头卡住:
- 确认签名已启用:
composer show --security输出含Signature verification: enabled - 删掉
composer.json中所有repositories字段,避免私有源绕过 Packagist 审核 - 强制走 dist 包:
--prefer-dist(而非--prefer-source),因 ZIP 包由 Packagist 发布时签名固定,Git HEAD 可能已被篡改 - 禁止 web 访问
/vendor/:Nginx 加location ^~ /vendor/ { return 403; },否则/vendor/autoload.php可能泄漏路径或类结构
真正危险的不是“有没有脚本”,而是“脚本在什么权限下、从哪来、有没有被篡改过”。参数和配置只是表层开关,签名、来源、权限三者缺一不可。










