伪装成github.com用户

Mee*_*ple 2 git security authentication

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

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

git config user.email "MyColleague@work.com"
Run Code Online (Sandbox Code Playgroud)

使用他的github.com电子邮件地址完成之后,我所做的所有提交以及他推断的用户名和个人资料图片都会显示在他的个人资料下!

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

我的两个问题是:-

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

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

Rob*_*ier 5

这是可能的,因为git是如何设计的,而不是GitHub。您要进行身份验证才能访问存储库。作为具有写访问权的人,您可以将提交推送到存储库。GitHub本身没有任何方法来验证提交。您可能已将其与其他用户合并。当您推动时,您并不是在说“这些是我的承诺”。您说的是“这些是要添加到存储库的提交,而我有权将提交添加到存储库。”

实际上,这正是拉取请求的工作方式。您将提交提交给我,并且我批准将其添加到存储库中(将其放入)。由于您创建了这些提交,因此您仍然以提交人的名字命名它们。但是我正在使用我的授权(和凭据)来添加它们。当我这样做时,我并没有伪装成你。

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

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

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

(记住所有这些,在git中,“ commit”是给定点上存储库中的所有代码。不仅仅是您所做的更改。这有时是一个混乱的点,因此值得保留在随时都回头来。)