伪装成 github.com 用户



在使用 git bash 提交到 github.com 上的存储库一段时间后,我发现了一些有趣的行为。

我可以使用 git config 命令将本地存储库中的电子邮件地址设置为我喜欢的任何内容......

git config user.email "MyColleague@work.com"

使用他的 github.com 电子邮件地址执行此操作后,我所做的所有提交都出现在他的个人资料下,以及他推断的用户名和个人资料图片!

我正在使用我存储的凭据向 github.com 进行身份验证,但我能够伪装成他。

我的两个问题是: -

为什么这是可能的,是设计使然吗?

如何查看通过 https 进行实际推送的身份验证/用户帐户详细信息,而不是提交?

这是可能的,因为 git 的设计方式,而不是 GitHub。您正在进行身份验证才能访问存储库。作为具有写入权限的人,您可以将提交推送到存储库。GitHub 没有任何方法可以对提交本身进行身份验证。您可能已从其他用户合并它们。当你推动时,你不是在说"这些是我的提交"。您说的是"这些是要添加到存储库的提交,我有权将提交添加到存储库。

事实上,这正是拉取请求的工作方式。您向我发送提交,我批准将它们添加到(将它们拉入)存储库。提交仍然有你作为作者的名字,因为你创建了它们。但我正在使用我的授权(和凭据)来添加它们。当我这样做时,我不是伪装成你。

没有跟踪谁将每个提交推送到上游。它不会存储在任何地方。假定具有推送访问权限的人员正在为提交提供担保。

Git 中有一个更强大的身份验证机制,那就是签名标签。如果要验证您是将给定标签附加到给定提交的人,则可以对其进行签名。这仍然不能证明提交的所谓"作者"是有效的。这只是证明你是签署它的人。

Joe Phillips 在下面指出,您现在可以签署单个提交。如果将-S添加到commit命令,则会得到此信息。现在,您还可以在使用mergepull时验证签名。如果您的整个团队都使用它,您可能会获得所需的身份验证级别。

(请记住,在 git 中,"提交"是给定点存储库中的所有代码。这不仅仅是您所做的更改。这有时是一个混乱点,所以值得始终牢记在你的脑海中。

这是预期的行为,但不是它看起来的样子。

当您在.gitconfig中设置电子邮件时,您不会对 GitHub 凭据提出任何声明。您设置的只是应在"作者"字段中用于您创建的任何新提交的值。您甚至可以通过使用git commit命令的--author标志来手动设置提交。

当您推送到远程仓库时,它使用的是您的 GitHub 凭据 - 因此您仍然只能写入您具有正确权限的仓库。

总而言之:您并没有真正冒充您的同事,所有更改仍然通过您的凭据进行。您所做的只是为提交的单个数据字段记录不同的值。


有关 GitHub 的更多特定信息,您应该查看此帮助文章:https://github.community/t5/Support-Protips/Why-is-my-commit-associated-with-the-wrong-person/ba-p/6728

GitHub 甚至发布了一系列修复此类问题的步骤:https://help.github.com/en/articles/changing-author-info

相关内容

最新更新