只要有提交 commit 的权限, 就可以很轻松的修改自己 commit 时的 email 和 username, 而这是 git commit 能辨别你身份的几乎唯一工具, 在 github 上会直接显示你伪装的人的头像...
比如如果你和你讨厌的某个 co-worker 共同贡献一个项目, 你完全可以假冒他的身份做一些奇怪的 commit...
这里有一个 10 年前的 repo 演示了这玩意儿 https://github.com/Mikulas/fake-author-attack 很显然我今天自己测试时也成功了
当然,GitHub 上, 如果你有在本机设置证书, 或是使用 GitHub 的网页端, 如果你的 email/username 跟你的实际账号一致, 在 commit 旁边会有 "verified" 的标志, 不过用本地客户端, 没设证书就没有这种功能了... 另外手机版的 GitHub 看不到 verified 的标志
How to Spoof Any User on Github…and What to Do to Prevent It
我问 chatGPT 的时候, 他说 git 还会保存真实的 author, 不过我没有找到
1
duke807 2023-04-27 10:07:24 +08:00 via Android
用 git 自带的图形工具 gitk 可以很容易看到 commiter 和 author
|
2
falsemask 2023-04-27 10:08:58 +08:00
我之前在 github 看到一个开源项目伪造了 Linus 的提交记录
|
3
duke807 2023-04-27 10:11:38 +08:00 via Android
另外要说的是,git 提交本身是可以数字签名的
|
4
Reficul 2023-04-27 10:12:25 +08:00
GPG 签名的重要性
|
5
duke807 2023-04-27 10:16:13 +08:00 via Android
不考虑签名的情况下,认准库的管理者就行
2 楼说的是 fork kernel 库,在 fork 出来的库里面搞事情,结果用主库路径 + fork 的库的自己的提交 hash ,也能正常访问自己的提交,这个 bug 据说已经解决,这个 bug 是 github 的问题,不是 git 的问题 |
6
hahastudio 2023-04-27 10:21:14 +08:00 1
比较近的一次广泛讨论的 "Linus commit"
https://github.com/torvalds/linux/tree/8bcab0346d4fcf21b97046eb44db8cf37ddd6da0 /t/830735 |
7
hahastudio 2023-04-27 10:21:37 +08:00 1
7.4 Git Tools - Signing Your Work
https://git-scm.com/book/en/v2/Git-Tools-Signing-Your-Work Signing commits https://docs.github.com/en/authentication/managing-commit-signature-verification/signing-commits |
8
SleepyRaven 2023-04-27 11:08:44 +08:00
vue 作者也被伪造过 commit ,内容是停止维护 vue:)
|
9
Aoang 2023-04-27 11:30:10 +08:00 via iPhone 1
这不算伪造,算是一个 Future 。
因为 Git 最初设计出来是集成到邮箱里面的,邮箱有信任机制,直到现在 Linux kernel 还是用邮件列表开协作的。 抛弃邮箱之后,这个功能就成了一个 Bug ,但是也有 GPG 签名可以解决一半这个问题,GPG 签名来证明 Commit 。 为什么只解决了一半呢?功能设计出来似乎忽略了在 Web 界面中的 Squash 压缩提交 |
10
0o0O0o0O0o 2023-04-27 11:36:28 +08:00 via iPhone
dependabot[bot]
dependabot-preview[bot] github-actions[bot] 我经常给自己的 repo 提交时“伪造”这几个,有头像,看着好玩。 而且我觉得这个“feature”用来作恶也是能增加取信度的 |
11
weeei 2023-04-27 16:25:47 +08:00
最初从 SVN 迁移到 Git 就考虑这个问题了,结论是内部成员不会这样干。外部项目需要在接受 PR 的时候看一眼就行。
|