出于安全原因如何禁用 GIT 挂钩?

Den*_*Den 5 git security githooks

如果您克隆 git 存储库,我认为出于安全原因不会克隆挂钩。但是如果我通过 ZIP 文件等其他方式获取存储库怎么办?当我在不完全信任的存储库上运行 GIT 命令时,如何确保没有执行任何钩子?

我能想到的是删除 .git/hook 目录中所有文件的可执行标志。但根据文档,钩子通常只存储在这个目录中,因此可能还有其他地方需要首先清理。(顺便问一下如何更改hook目录?)

举个例子,我担心像本次比赛中的文件这样的文件:

http://hackyeaster.hacking-lab.com/hackyeaster/challenge12.html

tor*_*rek 3

您是对的,如果您.git通过克隆以外的其他方式收到目录,则它可能包含恶意软件,包括挂钩。(如果你习惯从其他地方下载任意代码而不检查它,那么你面临的风险就不仅仅是 git hooks 了。)

\n\n

事实证明,旧版本的 git 中存在一个错误,无法禁止名称类似于.Git. 如果您使用区分大小写的文件系统将此类存储库克隆到 Linux 或 Unix 机器上,则没问题,但如果您使用区分大小写的文件系统克隆到 Windows 或 Mac 系统或设置此类文件系统)在你的 Linux/Unix 机器上),名称与.Git名称匹配.git,这些旧版本的 git 将继续写入.git;所以即使你使用标准的 git 克隆机制,有人也可以通过这种方式将东西偷偷进入你的系统。

\n\n

在 2.9 之前的 Git 版本中,关闭执行位.git/hooks/* 足以阻止钩子运行(因为没有替代的钩子位置)。在 Git 2.9 或更高版本中,您\xe2\x80\x94 或拥有配置文件\xe2\x80\x94 的任何人都可以配置一个core.hooksPath变量来添加可以运行挂钩的其他位置,因此仅此还不够。作为一般规则,每当您从其他地方获得未经验证的代码时,都应该仔细检查它。即使使用安全证书签名的软件(例如,Apple 的 Mac 软件更新),您也可能需要一定程度的谨慎,因为错误确实会发生。

\n

  • @pmos:是的,`core.hooksPath` 是在 2016 年 6 月发布的 Git 2.9 中引入的(在我写完答案之后)。不过我现在就编辑它。 (2认同)