竹笋

首页 » 问答 » 灌水 » 这段StackOverflow上被复制最
TUhjnbcbe - 2025/7/12 18:14:00
北京治疗白癜风医院那家最好 http://www.jk100f.com/baidianfengzixun/baidianfengjiankang/4747.html

所以StackOverflow上复制最多的Java代码片段中,其实包含了一个bug.

StackOverflow相信大家都不陌生,它大概是全球最大最出名的编程领域问答社区了。这段代码的上传者名叫AndreasLundblad,他是Palantir的一位Java开发者,也是社区中回答贡献最高的作者之一。这个bug就是他亲自承认的。

年发布的一篇学术论文中提到SO社区中被提取和复制最多的代码就是Lundblad上传的这一段Java代码,内容是将字节数打印成人类可读的格式,比如将,,字节处理为.5MB。它在大量开源项目中都被使用过。

这段代码是作为年9月发布的一个SO问题的答案被上传的,这段代码已经被嵌入到6,多个GitHubJava项目中(Git搜索结果见下图),比其它任何Java代码片段都要多。

在上周发表的一篇博客文章中,Lundblad承认自己的这段代码存在缺陷,它错误地将字节数转换成了人类可读的格式:

publicstaticStringhumanReadableByteCount(longbytes,booleansi){intunit=si?1:;if(bytesunit)returnbytes+B;intexp=(int)(Math.log(bytes)/Math.log(unit));Stringpre=(si?kMGTPE:KMGTPE).charAt(exp-1)+(si?:i);returnString.format(%.1f%sB,bytes/Math.pow(unit,exp),pre);}

Lundblad说,在阅读了一些学术文章之后他曾经再度审视了这一段代码,并且在自己的博客上发布了一个修正版本。

虽然这段代码中的缺陷仅仅是一个琐碎的数据转换错误,最后所导致的也可能只是文件大小的细微差别,但类似情况的后果有可能会更糟。如果这段代码中包含了一个安全缺陷,那么要修复所有使用这段代码的项目可能需要花上几个月甚至几年的时间,也让攻击者有机可乘。

即使大家都知道在网上copy他人的代码有风险,但大量程序员每天还是照做不误。

年的这项研究不仅揭露了这一段小小的有缺陷的代码,更值得大家深思的是在Java编程的生态中,copy他人代码是多么普遍的行为。每天都有大量程序员在SO社区上的相关问题中直接复制最佳答案的代码,大部分时候甚至不会去检验这段代码作者是谁,代码中是否存在问题。

从SO复制代码并且不署名的开发人员实际上是对团队中的其他人隐瞒了他们在项目中引入未经审查的代码这一事实。

虽然这听起来可能过分严重,但年10月的另一项研究就表明StackOverflow上确实有很多包含安全漏洞的代码:该研究论文提到在过去的10年中,在StackOverflow上发布的69种最流行的C++代码片段中发现了重大的安全漏洞。

研究人员表示,他们在总共个GitHub项目中发现了这69个易受攻击的代码片段,这显示了一个错误的SO答案能够如何对整个开源应用生态系统造成破坏。

原文作者:AndreasLundblad

翻译/整理:4字节

根据CC-NY-BC协议

1
查看完整版本: 这段StackOverflow上被复制最