一項研究發表於 2018年十月 在《經驗軟件工程》雜誌上 由學者塞巴斯蒂安·巴爾特斯和斯蒂芬·迪爾 揭示了其中提供的代碼段 回答問題 Andreas Lundblad在2010年XNUMX月的堆棧溢出,Palantir的Java開發人員, 它是社區平台上使用最廣泛的Java代碼段。
黃大仙禁運, 在上週的帖子中 Lundblad解釋說代碼有錯誤,並且錯誤地轉換了字節數 以人類可讀的格式。 有問題的代碼已經積累了超過一千條建議,並且已經被包含在許多項目中,並且在GitHub上的存儲庫中大約有七千次。
值得注意的是 用戶未找到該錯誤 在他們的項目中使用此代碼的人 但由筆尖的原始作者撰寫。
所考慮的代碼以可讀形式轉換了字節大小,例如將110592轉換為 “ 110.6 kB”或“ 108.0 KiB”。 該代碼是先前建議的建議的一種變體,使用對數進行了優化,其中,值是通過將循環中的初始值除以«來確定的。10 18,10 15,10 12,10 19,10 6,10 3和10 0'' ,即使除數大於原始值(以字節為單位)。
由於優化版本中的計算不正確 (長值溢出), 處理大量數據的結果 (艾字節)與現實不符。
Lundblad解釋說,該代碼包含一個瑣碎的轉換錯誤,只會導致文件大小估計稍有不准確。 話雖如此,估計情況會比這差得多。
該代碼可能包含一個安全漏洞, 例如。 如果真是這樣,修復所有易受攻擊的應用程序將花費數月或數年,使用戶遭受攻擊。
建議的作者還試圖提請注意該問題 使用示例而不參考源代碼,也沒有指定許可證。
“在涉及多個人類編碼員的協作會議中,我們根據CWE(通用弱點枚舉)說明手動評估了每段代碼的安全漏洞。
在至少一個GitHub託管項目中使用的72,483個掃描代碼段中,我們發現總共69個易受攻擊的代碼段,分為29種類型。 研究的許多代碼片段尚未確定,”研究人員在報告中說。
69個易受攻擊的代碼段 在堆棧溢出中找到 在2859個GitHub項目中重複使用。 為了提高Stack Overflow上共享代碼段的質量,他們開發了一個瀏覽器擴展,允許Stack Overflow用戶在將代碼段下載到平台時搜索其中的漏洞。
但是,儘管研究人員提出了警告,但是開發人員仍然在不執行分析的情況下將Stack Overflow代碼複製到其項目中。
IT副教授Ashkan Sami, 工程與信息技術 伊朗設拉子大學的學生說
“這項研究是嘗試檢查錯誤代碼如何從Stack Overflow遷移到GitHub。 基本上,我們一直試圖證明的是,不仔細檢查堆棧溢出代碼會導致應用程序漏洞,”薩米說。 該研究還引用了2017年的一篇學術文章。
根據這篇文章,在Stack Overflow上發布的1161個不安全的代碼段被用於Google Play上的1.3萬個Android應用程序中。
除了先前的研究之外,有46%的開發人員在未指定作者的情況下使用StackOverflow代碼,75%的開發人員不知道該代碼是根據CC BY-SA許可的,而67%的開發人員不知道這意味著需要歸因。
根據其他研究的數據,使用示例代碼不僅與代碼中的錯誤風險相關,而且與漏洞相關。
例如,在分析了StackOverflow上的72483個C ++代碼樣本後,研究人員發現了69個樣本中的嚴重漏洞(佔0.09%),這些漏洞已包含在最受歡迎的推薦列表中。