有哪一種編程語言比其他的更安全嗎?
近日開源安全公司WhiteSource針對編程語言的安全性做了一份報告,這份報告提出了一個新問題—— “有哪一種編程語言比其他的更安全嗎?” 編程語言之爭,是開發者社區一直以來的熱議問題,不過討論的過程往往伴隨著雙方的憤怒及和諧的破損,不了了之。許多開發者喜歡證明他們使用的編程語言占主導地位,這個過程中經常提到的就有安全性。
近日WhiteSource 就七種熱門編程語言的安全性做了年岸度報告。該報告匯總了多個來源的開源漏洞信息,如國家漏洞數據庫(NVD)、安全公告、GitHub 問題追踪器(Issue Tracker)和流行開源項目問題追踪器。
WhiteSource根據開源社區過去幾年使用的一些流行語言,確認了七種比較熱門的編程語言:C,Java,JavaScript,Python,Ruby,PHP和C ++。在這些編程語言的基礎上,WhiteSource搜索了數據庫,查看了過去十年中每種語言中已知開源安全漏洞的數量、隨時間推移這些安全漏洞發生的變化、以及各語言最常見的CWE(Common Weakness Enumeration,通用缺陷列表)。
報告顯示了過去10年中不同語言的開源漏洞總數,很明顯居於首位的編程語言是C 語言,占到了近一半的比例。
不過這不能說明C 語言的安全性遠低於其他熱門語言。如此高的佔比有幾個因素可以解釋:一是C 語言的使用時間在調查語言中是最長的,二是C 語言一般編寫的代碼量很大,三是Open SSL 和Linux 內核等基礎架構背後的主要語言之一就是C 語言。這些存在時間、體積和中心性等因素的組合,可以解釋C 語言為什麼存在這麼多大量已知開源安全漏洞。
報告也顯示了隨著時間推移不同編程語言的開源安全漏洞數量變化。過去的十年中,它們各有自己的高點和低點。但是所有語言都由一個突出的趨勢,就是近兩年所有語言的已知安全漏洞數量都大幅增加。這可以看作是安全漏洞意識的提高及開源的更加普及。隨著開源安全研究投入資源的增加,人們發現的安全問題數量也會變多。
這些漏洞的嚴重程度如何呢?調查人員研究高嚴重性的開源安全漏洞(CVSS v2 得分高於7)時,發現除了JavaScript 和PHP,報告中涉及的大多數語言嚴重漏洞的佔比處於下降趨勢。
這可能是安全研究人員使用自動化工具的結果。雖然借助這些工具,過去幾年大多數語言的中等漏洞數量一直在增加,但這些工具通常不能發現複雜和嚴重的安全問題。
調查人員還研究了每種語言常見的CWE。這其中,跨站腳本攻擊(XSS,也被稱為CWE-79)和輸入驗證(也被稱為CWE-20)佔據了最常見的位置。另外較為突出的CWE有信息洩漏(CWE-200),路徑遍歷(CWE-22),權限及訪問控制(CWE-264)、不正當訪問控制(CWE-284)等。
“我的編程語言比你更安全”,類似的話題可以是一種有趣的消磨時間方式。關於哪種編程語言最安全的討論往往也會出現一些有趣的觀點,而找到最終答案反而可能無法幫助你創造兼具創新性和安全性的軟件。
如今,大多數軟件開發都依賴多種編程語言來實現,而不是執著於某一編程語言。掌握已知的開源漏洞、了解團隊正在使用的編程語言中的優點和缺點,這些都是確保軟件項目從一開始就具有安全性的好方法。
最安全的編程語言沒有最終贏家。WhiteSource 從研究中得出的最後一個結論是,編程語言的安全性無關於語言本身,而是取決於使用者的使用方式。開發團隊使用了適當的管理方法,減輕整個SDLC (系統生存週期)的漏洞,這才是保證項目安全的好選擇。