V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
nikoo
V2EX  ›  问与答

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

  •  
  •   nikoo · 2017-09-02 13:40:14 +08:00 · 2995 次点击
    这是一个创建于 2428 天前的主题,其中的信息可能已经有所发展或是发生改变。
    比如已经不存在的 SS 和 SSR 项目,仅可以从别人 fork 的备份下载源码,那这个 fork 的项目是否安全?
    如何确认与 fork 源是一致的?
    15 条回复    2017-09-02 23:11:11 +08:00
    Yvette
        1
    Yvette  
       2017-09-02 13:47:31 +08:00 via iPhone
    看 commit 记录
    nikoo
        2
    nikoo  
    OP
       2017-09-02 13:50:13 +08:00
    @Yvette 看了 commit 记录是与官方一致的情况下,可以确保是安全的吗?
    Yvette
        3
    Yvette  
       2017-09-02 14:03:44 +08:00 via iPhone   ❤️ 1
    @nikoo 你这反问得我有点愣了,既然都能看到官方的 commit 记录那还要看 fork 的干啥…不过话说回来,每个 commit 的哈希值跟前一个 commit 以及提交时间都有关系,所以不可能被篡改的,确保一致。
    FrankFang128
        4
    FrankFang128  
       2017-09-02 14:05:17 +08:00
    check sum?
    dong3580
        5
    dong3580  
       2017-09-02 14:11:24 +08:00 via Android   ❤️ 1
    @FrankFang128
    他没有源的情况下无法核对每次 commitSum 吧。
    另外 commit 记录也可以改作者信息,
    nikoo
        6
    nikoo  
    OP
       2017-09-02 14:14:17 +08:00
    @Yvette 谢谢!比如这个 SSR fork 项目: https://github.com/ssrbackup/shadowsocksr

    可以看到他的 commits 记录 https://github.com/ssrbackup/shadowsocksr/commits/manyuser
    都是作者本人提交的,这个提交者是无法篡改的把?
    是不是可以说明这个 fork 是与官方一致的?
    nikoo
        7
    nikoo  
    OP
       2017-09-02 14:17:54 +08:00
    @dong3580 commits 记录里面的作者信息例如 "breakwa11 committed on Jul 27" 可以被修改?
    Pastsong
        8
    Pastsong  
       2017-09-02 14:19:53 +08:00   ❤️ 1
    @nikoo 可以,只要原 commit 没有签名
    momocraft
        9
    momocraft  
       2017-09-02 14:20:22 +08:00   ❤️ 1
    我在本地简单实验了一下:

    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
        10
    nikoo  
    OP
       2017-09-02 14:23:29 +08:00
    @Pastsong 谢谢

    如果就这个 SSR fork 项目 /ssrbackup/shadowsocksr
    从哪些方面可以对比确保与原项目 /shadowsocksr 一致,并且是安全的?
    dong3580
        11
    dong3580  
       2017-09-02 14:24:25 +08:00 via Android   ❤️ 1
    @nikoo
    这种可以修改的,
    momocraft
        12
    momocraft  
       2017-09-02 14:25:26 +08:00
    #9 的补充: 最后一段 "内部所有 blob 的 sha1" 是指那个 blob 路径中的 sha1,不是内容的。
    ProjectAmber
        13
    ProjectAmber  
       2017-09-02 14:25:36 +08:00   ❤️ 2
    无法确保安全,因为 git 的一切都可以伪造。唯一能保证 commit 来自特定开发者的是其主动添加的签名。
    https://github.com/blog/2144-gpg-signature-verification
    nbndco
        14
    nbndco  
       2017-09-02 17:24:36 +08:00
    commit 是可以篡改的,在 GitHub 上所有没显示 verified 的都是可能被改过的。
    Yvette
        15
    Yvette  
       2017-09-02 23:11:11 +08:00
    学习了,以前没听说过有 Verified 的 commit
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2856 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 36ms · UTC 11:54 · PVG 19:54 · LAX 04:54 · JFK 07:54
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.