「從整體數據上看,我們這個行業過去十年來沒能消除任何一種漏洞類別。」Eng 說,「沒有任何問題完全消失。很多事情都在波動,但看看平均情況,你會發現相比于其它指標,這些數據更能反映語言選擇和語言流行程度的變化。我們看到 C++ 常見的緩存溢出問題有下降的趨勢,但這并不是因為開發者處理這些問題的能力更強了,而是因為使用 C++ 進行開發的人變少了?!?/div>
「有些語言會盡力避免開發者考慮不周而把事情搞砸,.NET 就是其中最早的語言之一。」Eng 解釋說,「相比于使用 PHP,使用 .NET 時,你會發現大量 API 都有更安全的默認設置,使得出現跨站腳本錯誤或 SQL 注入錯誤會困難得多。在 PHP 中,這些錯誤幾乎是默認的——除非你剛好在使用一種能為你提供更多保護的更現代框架。使用 PHP 出錯的情況實在太多了?!?/div>
Veracode 在其分析的 JavaScript 應用中發現的漏洞遠遠更少,但即使 JavaScript 有更安全的默認設置,龐大的 npm 生態系統中的 JavaScript 和 node.js 開源軟件庫是潛在的薄弱環節。
「即使你能修復自己寫的代碼中的所有漏洞,你使用的第三方軟件庫仍會帶來諸多變數?!笶ng 說,「打補丁實際上并不如你期望的那么好。現在的趨勢是開發者在需要時才會去下載這些軟件庫的最新版本,然后他們就再也不更新了,除非這個軟件庫又增加了什么新功能。」
工程開發和產品團隊應該如何降低為關鍵應用程序打補丁的麻煩和成本?Eng 的建議是保持更新并且清晰地跟蹤構建應用的技術和安全成本隨時間的變化情況。在某個時間,該應用將需要得到修復或打補丁,其中包括語言更新和關鍵軟件庫的補丁。
Eng 說:「如果我現在在使用 4.5 版,而 4.6 版已經出來了,我可以使用該補丁,同時幾乎不會產生功能方面的影響。開源軟件庫不會在小版本更新中對軟件庫進行重大修改。但如果你現在使用的是 2.0 版,那么你就必須得更新到 4.6 版,這個過程會很痛苦」。
對于使用龐大 npm 生態系統的 JavaScript 來說,更新軟件庫這個問題可能會更嚴重一點,但 Java 和 Python 都有各自的大型生態系統:Maven 和 PyPI。
Eng 表示 JavaScript 應用平均有大約 400 個依賴關系。如果來看第 90 百分位數的 JavaScript 應用程序,它們的依賴關系數量可達 1000 或 2000 個。
應用安全公司 Snyk 曾解釋說影響 JavaScript、Ruby、Java、PHP 和 Python 的大多數安全漏洞都源自項目中加載的主要組件之間的間接依賴關系。
還有一點,某些 JavaScript 軟件庫非常受歡迎,多達 80%-90% 的 JavaScript 應用在使用它們。
Eng 說:「只要這些軟件包中某一個包里有一個漏洞,你就繼承了該風險。而且這不只是安全風險。」
他指的是 JavaScript 軟件庫 left-pad 曾出現過的情況:2016 年的一場爭吵之后,一個開發者將該軟件庫移出了 npm。
「它從 GitHub 上消失了,然后突然之間,三分之二的互聯網崩潰了,因為它們全都依賴這個幾行代碼的軟件庫來確定一個數是否在左側填充了零?!?/div>
原文鏈接:https://www.zdnet.com/article/programming-language-security-these-are-the-worst-bugs-for-each-top-language/