近日,一位18岁的小白向GitHub仓库提交了一个PR(PullRequest,拉取请求),并结果是一个“@”把GitHub变成了一个“僵尸网络”,并向近40万开发者发送了骚扰邮件。“全回复风暴”席卷开源圈。一个“@”,让40万开发者共收到6000万+封邮件据悉,名为RohithSreedharan的新手原本想向游戏公司EpicGames的GitHub仓库推送一个伪造的Pullrequest(向UE提交新代码)来获得一些贡献历史(试图将自述文件中的3个词更改为“实践”)。但在这样做时,RohithSreedharan在评论中“@”了与EpicGames组织相关的所有开发人员,包括加入该组织以查看虚幻引擎(UnrealEngine)源代码。因此,他的“@EpicGames/developers”操作触发了reply-all事件:有关此PR的电子邮件通知将发送给属于EpicGames组织的所有GitHub用户。即,RohithSreedharan错误地“@”了与EpicGames组织相关的所有开发者,即任何加入该组织查看虚幻引擎(UnrealEngine)源代码的人。结果,这个“@”突然导致大约40万使用虚幻引擎(UnrealEngine)的开发者收到来自GitHub的关于这个pullrequest的通知邮件。同时,RohithSreedharan的这次操作也让所有这些开发者订阅了Pullrequest的评论线程——也就是说,只要这400,000名开发者中有人评论了RohithSreedharan的Pullrequest,那么这条评论也会被发布。通过电子邮件通知并发送给其他EpicGames组织的所有成员,从而触发电子邮件“轰炸”事件。关键是RohithSreedharan提交的Pullrequest被开发者发现了很多问题,导致大量的评论和相应的邮件通知。不幸的是,邮件通知中的退订链接实际上并没有取消用户对pullrequest的订阅,所以相当一部分开发者收到了150+封邮件,甚至有200-400封邮件之多。也就是说,GitHub当晚一共发送了6000万+封邮件。随着邮件“轰炸”事件的不断发展,一些开发者终于找到了取消订阅PullRequest的方法——“在右侧栏的底部有一个‘取消订阅’按钮,就在参与者列表的正上方,点击它会忽略大量传入通知。”至此,EpicGames也了解到了事情的来龙去脉,立即锁定了Pullrequest,关闭了其评论功能,终于结束了这场“闹剧”。GitHub邮件机制遭质疑目前,这起事件已经在reddit、HackerNews等知名社区被大量开发者讨论。其中,reddit上一位名叫@TomSwirly的开发者表达了对这一事件的愤慨,他说,“我敢打赌这40万开发者中有很多都是初学者。如果我是初学者,我很容易就会浪费大量时间试图弄清楚到底是怎么回事在。”但是“走开,垃圾邮件发送者,不管你是谁。”此外,linustechtips上一位名为@trag1c的开发人员对该事件及其“煽动者”发表了很好的评论——新手RohithSreedharan评论道:“老实说,我不知道该称这个孩子为‘传奇’还是‘无脑’(可能两者都有)。假设这个孩子正试图在软件开发中找到一席之地。”一份工作,也许他在Github上有一个学校项目什么的,他可能认为他可能会对某些项目做出虚假承诺,试图说他为一些复杂的大型项目做出了贡献,比如UnrealEngine。但他犯下了“@”整个组织的致命错误,而不仅仅是审查拉取请求的人......遗憾的是,这可能对他的职业生涯没有帮助~“另一个值得关注的重要问题是-”为什么GitHub允许向400,000人发送电子邮件通知?”开发者@trag1c认为,“我实在想不出有什么好的理由允许@整个组织以这种方式,这也是Epic隐藏方式的一部分问题代码是。要查看Unreal代码源,您必须是GitHub上游戏组的一员,这当然允许您成为标记为此类的组的一员。但是这整个设置会导致‘灾难’的后果,因为你可能会用这样的设置对GitHub进行DDOS攻击……”同时,很多开发者也对GitHub应该优化的机制提出了建议为避免此类事件再次发生,对此,GitHub高级工程总监ShayFrendt也留言回应:“抱歉,我们目前的系统设计让您落入这种境地。我们正在努力发布一个补丁,试图打破你们都陷入的反馈循环。”推特道歉:“我错了,我保证不会再发生”事件发生后,18年-老新手开发者终于在6月5日发推文道歉:“非常抱歉,我不知道这会标记40万会员,非常抱歉发自内心的垃圾邮件,我向包括@EpicGamesand@github在内的所有团队道歉,没想到会这样,谢谢通知!我保证不会再发生了在推文中,他对此表示歉意,并表示他不知道这次操作会标记(@)大约400,000名会员。向所有@github公司团队道歉,“没想到会发生这种情况,谢谢你让我知道!我保证不会再发生了。”相信对于18岁的RohithSreedharan来说,近40万开发者的“邮件轰炸”肯定会让他学到很多东西。邮件“轰炸”事件的热度在推特和各大开发者社区持续发酵,我们将持续关注GitHub优化机制相关问题。
