靜態(tài)代碼分析安全公司 Veracode 近日發(fā)布了一份應(yīng)用程序分析報告,結(jié)果發(fā)現(xiàn)比起 JavaScript 和 Python 等語言,C++ 和 PHP 的安全漏洞要嚴(yán)重得多。
如果你是一位靠 .NET、C++、Java、JavaScript、PHP 或 Python 吃飯的開發(fā)者,那要注意了:一項新研究揭示了這些編程語言的主要安全漏洞。 靜態(tài)代碼分析安全公司 Veracode 近期發(fā)布了這些語言的漏洞類型數(shù)據(jù),這是該公司掃描了 13 萬應(yīng)用程序的安全問題后得到的報告。 該公司調(diào)查了用 .NET、C++、Java、JavaScript、PHP 或 Python 編寫的應(yīng)用程序的漏洞趨勢。這些數(shù)據(jù)整合在 Veracode 的《軟件安全狀態(tài)第 11 卷(State of Software Security Volume 11)》報告中: https://www.veracode.com/sites/default/files/pdf/resources/ipapers/security-flaw-heatmap/index.html。
Veracode 掃描 13 萬個應(yīng)用程序后得到的漏洞類型數(shù)據(jù)。 對于最常用的前端開發(fā)語言 JavaScript,Veracode 發(fā)現(xiàn) 31.5% 的應(yīng)用至少有一個跨站腳本(XSS)漏洞,而用 PHP 寫的應(yīng)用中有 74.6% 至少有一個 XSS 漏洞。此外,71% 的 PHP 應(yīng)用存在加密問題。 對于用 .NET 寫的應(yīng)用,最主要的問題是信息泄露——62.8% 的 .NET 應(yīng)用存在該問題。C++ 應(yīng)用最大的問題是錯誤處理,占到了 66.5%。
至于 Java 應(yīng)用,首要問題是 CRLF 注入(回車或換行注入),占受調(diào)查應(yīng)用的 64.4%。Python 應(yīng)用中最嚴(yán)重的安全問題與加密相關(guān),出現(xiàn)在 35% 的受調(diào)查應(yīng)用中。 每種語言的漏洞嚴(yán)重性也存在很大差別。Veracode 發(fā)現(xiàn)用 C++ 寫的應(yīng)用中有 59% 存在非常嚴(yán)重的漏洞;而對于 PHP,這一數(shù)字為 52%。但是,用 JavaScript 寫的應(yīng)用僅有 9.6% 有非常嚴(yán)重的漏洞,Java 應(yīng)用的數(shù)據(jù)為 24%。 Veracode 首席研究官 Chris Eng 解釋了不同語言漏洞趨勢不同的原因,以及如何修復(fù)它們以避免嚴(yán)重損失。
「從整體數(shù)據(jù)上看,我們這個行業(yè)過去十年來沒能消除任何一種漏洞類別。」Eng 說,「沒有任何問題完全消失。很多事情都在波動,但看看平均情況,你會發(fā)現(xiàn)相比于其它指標(biāo),這些數(shù)據(jù)更能反映語言選擇和語言流行程度的變化。我們看到 C++ 常見的緩存溢出問題有下降的趨勢,但這并不是因為開發(fā)者處理這些問題的能力更強了,而是因為使用 C++ 進行開發(fā)的人變少了。」
另一方面,影響 JavaScript 和 Python 的問題則有所增長,原因是這兩種語言現(xiàn)在非常流行。在企業(yè)層面上,Java 和 .NET 依然備受歡迎。 PHP 依然是網(wǎng)頁應(yīng)用開發(fā)最常用的腳本語言之一,但 Eng 指出 PHP 漏洞數(shù)量更高的原因是該語言提供了大量不安全的原語以及大量錯誤開發(fā)的方式。
「有些語言會盡力避免開發(fā)者考慮不周而把事情搞砸,.NET 就是其中最早的語言之一。」Eng 解釋說,「相比于使用 PHP,使用 .NET 時,你會發(fā)現(xiàn)大量 API 都有更安全的默認設(shè)置,使得出現(xiàn)跨站腳本錯誤或 SQL 注入錯誤會困難得多。在 PHP 中,這些錯誤幾乎是默認的——除非你剛好在使用一種能為你提供更多保護的更現(xiàn)代框架。使用 PHP 出錯的情況實在太多了。」
Veracode 在其分析的 JavaScript 應(yīng)用中發(fā)現(xiàn)的漏洞遠遠更少,但即使 JavaScript 有更安全的默認設(shè)置,龐大的 npm 生態(tài)系統(tǒng)中的 JavaScript 和 node.js 開源軟件庫是潛在的薄弱環(huán)節(jié)。 「即使你能修復(fù)自己寫的代碼中的所有漏洞,你使用的第三方軟件庫仍會帶來諸多變數(shù)。」Eng 說,「打補丁實際上并不如你期望的那么好。現(xiàn)在的趨勢是開發(fā)者在需要時才會去下載這些軟件庫的最新版本,然后他們就再也不更新了,除非這個軟件庫又增加了什么新功能。」
工程開發(fā)和產(chǎn)品團隊?wèi)?yīng)該如何降低為關(guān)鍵應(yīng)用程序打補丁的麻煩和成本?Eng 的建議是保持更新并且清晰地跟蹤構(gòu)建應(yīng)用的技術(shù)和安全成本隨時間的變化情況。在某個時間,該應(yīng)用將需要得到修復(fù)或打補丁,其中包括語言更新和關(guān)鍵軟件庫的補丁。
Eng 說:「如果我現(xiàn)在在使用 4.5 版,而 4.6 版已經(jīng)出來了,我可以使用該補丁,同時幾乎不會產(chǎn)生功能方面的影響。開源軟件庫不會在小版本更新中對軟件庫進行重大修改。但如果你現(xiàn)在使用的是 2.0 版,那么你就必須得更新到 4.6 版,這個過程會很痛苦」。 對于使用龐大 npm 生態(tài)系統(tǒng)的 JavaScript 來說,更新軟件庫這個問題可能會更嚴(yán)重一點,但 Java 和 Python 都有各自的大型生態(tài)系統(tǒng):Maven 和 PyPI。
Eng 表示 JavaScript 應(yīng)用平均有大約 400 個依賴關(guān)系。如果來看第 90 百分位數(shù)的 JavaScript 應(yīng)用程序,它們的依賴關(guān)系數(shù)量可達 1000 或 2000 個。 應(yīng)用安全公司 Snyk 曾解釋說影響 JavaScript、Ruby、Java、PHP 和 Python 的大多數(shù)安全漏洞都源自項目中加載的主要組件之間的間接依賴關(guān)系。 還有一點,某些 JavaScript 軟件庫非常受歡迎,多達 80%-90% 的 JavaScript 應(yīng)用在使用它們。
Eng 說:「只要這些軟件包中某一個包里有一個漏洞,你就繼承了該風(fēng)險。而且這不只是安全風(fēng)險。」 他指的是 JavaScript 軟件庫 left-pad 曾出現(xiàn)過的情況:2016 年的一場爭吵之后,一個開發(fā)者將該軟件庫移出了 npm。 「它從 GitHub 上消失了,然后突然之間,三分之二的互聯(lián)網(wǎng)崩潰了,因為它們?nèi)家蕾囘@個幾行代碼的軟件庫來確定一個數(shù)是否在左側(cè)填充了零。」 原文鏈接:https://www.zdnet.com/article/programming-language-security-these-are-the-worst-bugs-for-each-top-language/
責(zé)任編輯:xj
原文標(biāo)題:用哪種編程語言寫的應(yīng)用漏洞最嚴(yán)重?
文章出處:【微信公眾號:數(shù)據(jù)分析與開發(fā)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
-
JAVA
+關(guān)注
關(guān)注
19文章
2957瀏覽量
104544 -
C語言
+關(guān)注
關(guān)注
180文章
7598瀏覽量
136183 -
編程
+關(guān)注
關(guān)注
88文章
3592瀏覽量
93594
原文標(biāo)題:用哪種編程語言寫的應(yīng)用漏洞最嚴(yán)重?
文章出處:【微信號:DBDevs,微信公眾號:數(shù)據(jù)分析與開發(fā)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論