git 的 --end-of-options 参数为何被忽视

git's –end-of-options Flag

git 的 --end-of-options 参数为何被忽视

上周在排查一个包管理器的 CVE 漏洞时,我意外发现了 git 中一个鲜为人知的参数:--end-of-options。这个在 2019 年引入的功能,专门用于解决因 -- 被 git 重新定义而导致的参数注入风险。许多包管理器如 Bundler、Composer 和 Go 在调用 git 时,常因未正确处理以连字符开头的分支名而中招。文章深入探讨了从 Docker 到 Phabricator 的历史漏洞案例,分析了为何大多数工具仍停留在使用 -- 或检查输入格式的阶段,而非采用更安全的 --end-of-options。同时,对比了使用 libgit2 等库与直接调用 git 二进制文件的优劣,揭示了在安全与兼容性之间的艰难权衡。

代码在没有 --end-of-options 保护时看起来完全正确且运行正常,直到某个参数以连字符开头为止。

同日更多故事

2026-07-23