用哪種語言寫的應用漏洞最嚴重?六大主流語言程式碼漏洞分析報告出爐

靜態程式碼分析安全公司 Veracode 近日釋出了一份應用程式分析報告,結果發現比起 JavaScript 和 Python 等語言,C++ 和 PHP 的安全漏洞要嚴重得多。

如果你是一位靠 。NET、C++、Java、JavaScript、PHP 或 Python 吃飯的開發者,那要注意了:一項新研究揭示了這些程式語言的主要安全漏洞。

靜態程式碼分析安全公司 Veracode 近期釋出了這些語言的漏洞型別資料,這是該公司掃描了 13 萬應用程式的安全問題後得到的報告。

該公司調查了用 。NET、C++、Java、JavaScript、PHP 或 Python 編寫的應用程式的漏洞趨勢。這些資料整合在 Veracode 的《軟體安全狀態第 11 卷(State of Software Security Volume 11)》報告中:

https://www。veracode。com/sites/default/files/pdf/resources/ipapers/security-flaw-heatmap/index。html。

用哪種語言寫的應用漏洞最嚴重?六大主流語言程式碼漏洞分析報告出爐

用哪種語言寫的應用漏洞最嚴重?六大主流語言程式碼漏洞分析報告出爐

Veracode 掃描 13 萬個應用程式後得到的漏洞型別資料。

對於最常用的前端開發語言 JavaScript,Veracode 發現 31。5% 的應用至少有一個跨站指令碼(XSS)漏洞,而用 PHP 寫的應用中有 74。6% 至少有一個 XSS 漏洞。此外,71% 的 PHP 應用存在加密問題。

對於用 。NET 寫的應用,最主要的問題是資訊洩露——62。8% 的 。NET 應用存在該問題。C++ 應用最大的問題是錯誤處理,佔到了 66。5%。

至於 Java 應用,首要問題是 CRLF 注入(回車或換行注入),佔受調查應用的 64。4%。Python 應用中最嚴重的安全問題與加密相關,出現在 35% 的受調查應用中。

每種語言的漏洞嚴重性也存在很大差別。Veracode 發現用 C++ 寫的應用中有 59% 存在非常嚴重的漏洞;而對於 PHP,這一數字為 52%。但是,用 JavaScript 寫的應用僅有 9。6% 有非常嚴重的漏洞,Java 應用的資料為 24%。

Veracode 首席研究官 Chris Eng 解釋了不同語言漏洞趨勢不同的原因,以及如何修復它們以避免嚴重損失。

「從整體資料上看,我們這個行業過去十年來沒能消除任何一種漏洞類別。」Eng 說,「沒有任何問題完全消失。很多事情都在波動,但看看平均情況,你會發現相比於其它指標,這些資料更能反映語言選擇和語言流行程度的變化。我們看到 C++ 常見的快取溢位問題有下降的趨勢,但這並不是因為開發者處理這些問題的能力更強了,而是因為使用 C++ 進行開發的人變少了。」

另一方面,影響 JavaScript 和 Python 的問題則有所增長,原因是這兩種語言現在非常流行。在企業層面上,Java 和 。NET 依然備受歡迎。

PHP 依然是網頁應用開發最常用的指令碼語言之一,但 Eng 指出 PHP 漏洞數量更高的原因是該語言提供了大量不安全的原語以及大量錯誤開發的方式。

「有些語言會盡力避免開發者考慮不周而把事情搞砸,。NET 就是其中最早的語言之一。」Eng 解釋說,「相比於使用 PHP,使用 。NET 時,你會發現大量 API 都有更安全的預設設定,使得出現跨站指令碼錯誤或 SQL 注入錯誤會困難得多。在 PHP 中,這些錯誤幾乎是預設的——除非你剛好在使用一種能為你提供更多保護的更現代框架。使用 PHP 出錯的情況實在太多了。」

Veracode 在其分析的 JavaScript 應用中發現的漏洞遠遠更少,但即使 JavaScript 有更安全的預設設定,龐大的 npm 生態系統中的 JavaScript 和 node。js 開源軟體庫是潛在的薄弱環節。

「即使你能修復自己寫的程式碼中的所有漏洞,你使用的第三方軟體庫仍會帶來諸多變數。」Eng 說,「打補丁實際上並不如你期望的那麼好。現在的趨勢是開發者在需要時才會去下載這些軟體庫的最新版本,然後他們就再也不更新了,除非這個軟體庫又增加了什麼新功能。」

工程開發和產品團隊應該如何降低為關鍵應用程式打補丁的麻煩和成本?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 上消失了,然後突然之間,三分之二的網際網路崩潰了,因為它們全都依賴這個幾行程式碼的軟體庫來確定一個數是否在左側填充了零。」

TAG: JavaScriptPHP漏洞應用Eng