GitHub 上别人 fork 的项目可能被篡改吗?

2017 年 9 月 2 日
 nikoo
比如已经不存在的 SS 和 SSR 项目,仅可以从别人 fork 的备份下载源码,那这个 fork 的项目是否安全?
如何确认与 fork 源是一致的?
3740 次点击
所在节点    问与答
15 条回复
Yvette
2017 年 9 月 2 日
看 commit 记录
nikoo
2017 年 9 月 2 日
@Yvette 看了 commit 记录是与官方一致的情况下,可以确保是安全的吗?
Yvette
2017 年 9 月 2 日
@nikoo 你这反问得我有点愣了,既然都能看到官方的 commit 记录那还要看 fork 的干啥…不过话说回来,每个 commit 的哈希值跟前一个 commit 以及提交时间都有关系,所以不可能被篡改的,确保一致。
FrankFang128
2017 年 9 月 2 日
check sum?
dong3580
2017 年 9 月 2 日
@FrankFang128
他没有源的情况下无法核对每次 commitSum 吧。
另外 commit 记录也可以改作者信息,
nikoo
2017 年 9 月 2 日
@Yvette 谢谢!比如这个 SSR fork 项目: https://github.com/ssrbackup/shadowsocksr

可以看到他的 commits 记录 https://github.com/ssrbackup/shadowsocksr/commits/manyuser
都是作者本人提交的,这个提交者是无法篡改的把?
是不是可以说明这个 fork 是与官方一致的?
nikoo
2017 年 9 月 2 日
@dong3580 commits 记录里面的作者信息例如 "breakwa11 committed on Jul 27" 可以被修改?
Pastsong
2017 年 9 月 2 日
@nikoo 可以,只要原 commit 没有签名
momocraft
2017 年 9 月 2 日
我在本地简单实验了一下:

1. 建立 repo A,commit 某个文件
2. 把 repo A 中那个文件对应的 blob 换成另外内容
3. git clone A B 能正常结束,B 中的这个文件会是改过的 blob 的内容。
4. 此时在 A 和 B 中运行 git fsck 都会说 `error: sha1 mismatch for .git/objects/8f/150a442a97cd4ad6320768029b7a1e13a42ca2 (expected 8f150a442a97cd4ad6320768029b7a1e13a42ca2)
`。但 fsck 不会自动运行。

因此即使一个 commit 和内部所有 blob 的 sha1 都和原 repo 一样,仍然有可能内容是被篡改过的。这样的篡改可以用 git fsck 检查出来。不知道 github 对这种事情有没有预防。
nikoo
2017 年 9 月 2 日
@Pastsong 谢谢

如果就这个 SSR fork 项目 /ssrbackup/shadowsocksr
从哪些方面可以对比确保与原项目 /shadowsocksr 一致,并且是安全的?
dong3580
2017 年 9 月 2 日
@nikoo
这种可以修改的,
momocraft
2017 年 9 月 2 日
#9 的补充: 最后一段 "内部所有 blob 的 sha1" 是指那个 blob 路径中的 sha1,不是内容的。
ProjectAmber
2017 年 9 月 2 日
无法确保安全,因为 git 的一切都可以伪造。唯一能保证 commit 来自特定开发者的是其主动添加的签名。
https://github.com/blog/2144-gpg-signature-verification
nbndco
2017 年 9 月 2 日
commit 是可以篡改的,在 GitHub 上所有没显示 verified 的都是可能被改过的。
Yvette
2017 年 9 月 2 日
学习了,以前没听说过有 Verified 的 commit

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/387652

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX