当我意识到我可以以其他用户的身份将某些内容提交到存储库时,我正在玩 git(下面解释了一个场景以便更好地理解(,并且它不被视为安全漏洞,可以理解(见此(。
例如,假设我对某个名为 AAA 的存储库具有推送访问权限,并且我的电子邮件地址是abc@xyz.com
。我可以简单地在我的系统上编辑~/.gitconfig
并将电子邮件地址设置为其他人的电子邮件地址:def@pqr.com
。然后,我在本地仓库中进行一些更改并提交它们(请记住,使用电子邮件地址def@pqr.com
;git 通过电子邮件地址跟踪提交(。现在,如果我尝试推送到远程存储库,它会询问用户名和密码。我放了我的,因为我有对 AAA 的推送访问权限,它通过了。我已经代表def@pqr.com
的所有者成功推送了提交。
所以基本上,通过这种方式,我可以模拟人们并代表他们添加提交。但同样,这不被视为漏洞(之前附上的原因链接(。
问题
如果 git 不允许如此轻松地更改电子邮件地址,那会容易得多。为什么 git 还没有在每次更改电子邮件地址时实现 OAuth 或类似的东西~/.gitconfig
?
正如我在列表中解释的那样,这是因为许多项目,如 Linux 和 Git,都是在补丁的基础上与集成来自不同人的补丁的维护者一起工作的。 因此,能够为任何作者推送数据非常重要。 如果您在补丁上欺骗了其他人的电子邮件地址,他们会通过收到他们未征求的审核意见来通知他们。
有些项目也不太关心谁写了补丁,而是关心补丁的质量是否好。 作者和提交者信息用于署名,而不是身份检查,因此作者最终与项目无关。
如果你担心身份欺骗,要求提交签名非常容易。 GitHub 将此作为您可以使用的存储库的选项提供。 然而,它给其他人带来了一些贡献的负担,因为它需要人们适当地设置 GnuPG。
如果你在 GitHub 这样的平台上操作,如果与 PR 关联的用户 ID 与与提交关联的用户 ID 不同,你也可以拒绝接受拉取请求,这是一种有效的方法;如果你愿意,这甚至可以通过 CI 来完成。