Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
git:在.gitconfig中设置任何人的电子邮件地址_Git_Security - Fatal编程技术网

git:在.gitconfig中设置任何人的电子邮件地址

git:在.gitconfig中设置任何人的电子邮件地址,git,security,Git,Security,我在玩弄git的时候意识到我可以向存储库提交一些东西,因为另一个用户为了更好地理解下面的一个场景,并且它不被认为是一个安全漏洞,这是可以理解的,请参见 例如,假设我有对某个名为AAA的存储库的推式访问,我的电子邮件地址是abc@xyz.com. 我只需在我的系统上编辑~/.gitconfig并将电子邮件地址设置为其他人的电子邮件地址:def@pqr.com. 然后,我在我的本地存储库中做一些更改,并用电子邮件地址提交它们def@pqr.com; git通过电子邮件地址跟踪提交。现在,如果我尝试推

我在玩弄git的时候意识到我可以向存储库提交一些东西,因为另一个用户为了更好地理解下面的一个场景,并且它不被认为是一个安全漏洞,这是可以理解的,请参见

例如,假设我有对某个名为AAA的存储库的推式访问,我的电子邮件地址是abc@xyz.com. 我只需在我的系统上编辑~/.gitconfig并将电子邮件地址设置为其他人的电子邮件地址:def@pqr.com. 然后,我在我的本地存储库中做一些更改,并用电子邮件地址提交它们def@pqr.com; git通过电子邮件地址跟踪提交。现在,如果我尝试推送到远程存储库,它会要求输入用户名和密码。我放了我的,因为我已经推到AAA,它通过。我已代表的所有者成功推送了提交def@pqr.com.

因此,基本上,通过这种方式,我可以模拟人并代表他们添加提交。但同样,由于之前附加的原因,这不被视为漏洞链接

问题: 如果git不允许如此轻松地更改电子邮件地址,那就容易多了。为什么git没有在~/.gitconfig中每次更改电子邮件地址时都实现OAuth或类似的东西呢?

正如我所说,这是因为许多项目,如Linux和git,都是在补丁的基础上与集成了各种人补丁的维护人员一起工作的。因此,能够为任何作者推送数据是很重要的。如果你在补丁上欺骗了其他人的电子邮件地址,他们会收到他们没有征求的评论,从而得到通知

一些项目也不太关心谁编写了补丁,而是关心补丁是否质量良好。作者和提交人的信息是用于归属,而不是身份检查,因此作者最终与项目无关

如果您担心身份欺骗,那么要求提交签名非常容易。GitHub为您可以使用的存储库提供了一个选项。然而,它给其他人带来了一些负担,因为它需要人们适当地设置GnuPG


如果您在GitHub这样的平台上操作,如果与PR关联的用户ID与与提交关联的用户ID不同,那么您也可以拒绝接受请求,这是一种有效的方法;如果你愿意,这甚至可以通过CI来完成。

这就是为什么在重要项目中你会签署东西,否则人们可以这样做。关于你的问题:什么?我认为您需要了解分布式工作的概念。您想根据自己的回购协议进行身份验证???你拥有它。为什么要检查您是否真的是您?@eftshift,我的意思是,我可以通过简单的修改将您的电子邮件地址添加到我的~/.gitconfig文件中,然后代表您继续添加提交。然后推送到远程存储库,它将显示您已提交。为什么我一开始就很容易冒充某人并代表他们添加提交?好的。。。让我举个例子。你能推进我拥有的回购协议吗?如果你可以的话,我们会讨论安全问题。不。但我可以像你一样添加提交并推送到我拥有或有推送访问权的回购。