與網路安全的其他方面一樣,程式語言的安全級別取決於我們所說的“安全”。的確,Java比其他一些常用語言具有更少的已識別漏洞。確實,至少在乍看之下,某些較新的語言似乎比Java更安全。
Java中發現的許多安全漏洞是其流行的結果。廣泛的使用意味著成千上萬的Bug獵手致力於查詢Java語言漏洞,這在該領域為Java提供了不公平的“優勢”。同樣,某些較新語言(例如Ruby)的隱含安全性可能更能反映其特定用途,而不是完整性。
在本文中,我們將研究最常用的程式語言在安全性方面的排名。我將解釋一些因素,這些因素會使一種語言的安全性比另一種語言低,以及為什麼已識別的漏洞在過去幾年中增加了這麼多。最後,我將建議Java開發人員減少程式碼漏洞的幾種方法。
底線:從安全形度來看,我們所知道的漏洞要比我們所不知道的漏洞好。
Java有多安全?最近對最常用程式語言漏洞的研究來自開放原始碼安全和許可證合規性平臺WhiteSource。WhiteSource研究了七種最受歡迎的開源程式語言:C,Java,JavaScript,Python,Ruby,PHP和C ++。然後,分析人員使用了多種來源,根據發現的漏洞數量對語言進行排名。
為什麼要開源?對開源語言進行排名的決定並非偶然。當涉及到漏洞時,許多專有語言(包括開源語言的專有實現)的透明性要差得多。對於私營公司而言,在其產品中釋出安全漏洞沒有商業意義,因此對於這些語言的漏洞級別,我們基本上還是一無所知。我們所知道的缺陷比我們所不知道的要容易得多。
根據WhiteSource的研究,到目前為止,最易受攻擊的程式語言是C,佔報告的所有漏洞的47%。該排名不會令有經驗的程式設計師感到驚訝,但其他結果可能會令人驚訝。PHP排在第二位,佔17%,其次是Java,佔12%,JavaScript排在前四位,佔11%。在這些“領導者”之後的是Python,C ++和Ruby。
[ 在這個由12部分組成的綜合課程中,從入門概念到高階設計模式學習Java!]
了解程式語言的安全性接下來,我們應該問為什麼某些程式語言比其他程式語言更容易受到攻擊。根據我引用的研究,您可能會得出結論,C代表了巨大的安全威脅。但是請考慮使用C比列表中的其他任何語言都使用了更長的時間。正如斯蒂芬·特納(Stephen Turner)在《技術研究雜誌》上寫道的那樣,“程式語言就像遺傳學一樣,因為有一些具有共同特徵的祖先已經氾濫成災。”
作為列表中最古老的語言,C是在與相對較新的語言(如Java和Ruby)完全不同的威脅環境中開發的。正如WhiteSource指出的那樣,C的相對年齡意味著它擁有相應數量的書面程式碼。C還是用於主要基礎設施(如OpenSSL和Linux核心)的語言之一。數量和集中性的結合會導致更多已知的開源漏洞。
儘管Java在此分析中表現良好,但作者強調了兩種型別的漏洞,這些漏洞尤其會影響Java。首先,他們指出,US-CERT長期以來一直警告我們有關Java的漏洞,主要是通過Web瀏覽器進行的日誌注入攻擊。可以通過對提交的輸入進行驗證或身份驗證來避免此類攻擊,但是開發人員通常不願徹底驗證輸入,因為擔心這會使他們的應用程式對使用者的友好程度降低。
其次,Java特別容易受到訪問控制漏洞之後的信任利用的影響。儘管自2013年以來認證流程有所改進,但許多開發人員仍依賴不可靠的權威機構頒發的證書。可能會獲得不如應有的嚴格的證書。在《技術研究雜誌》上引用的US-CERT 警告說,這為遠端攻擊者執行任意程式碼提供了方便。
Java相對較低的漏洞與C形成了有趣的對比。Java在C誕生之後很久就已經在威脅意識更高的環境中開發,因此Java的安全性要高得多也就不足為奇了。同樣,儘管Ruby看起來比Java更安全,但這可以由該語言的相對年輕及其小眾應用程式來解釋。
安全漏洞呈上升趨勢,其中包括WhiteSource報告說,“在過去兩年中,所有語言中已知的開源安全漏洞的數量大大增加了”。儘管自2015年以來,Java中的漏洞總數一直在穩步下降,但最近的漏洞數量激增需要作出解釋。我們可以將此增加歸因於兩個因素。
首先,存在漏洞賞金,這是一個相對較新的趨勢,成千上萬的技術專業人員選擇一種語言來查詢漏洞。這些至少佔了開源安全漏洞增加的部分原因。此外,通常假設威脅搜尋者會平等地掃描所有語言,但這不是事實。作為Web開發中最常用的語言之一,Java是威脅獵人的重要目標。在這種情況下,Java在已知漏洞方面的第三位開始顯得很低。
軟體系統也比10年前複雜了一個數量級,這是Java和其他語言中發現的漏洞數量不斷增加的另一個主要因素。在智慧手機應用程式可能成為感染源並且每個公司都必須擁有啟用JavaScript的網站的世界中,網站漏洞的數量呈指數級增長也就不足為奇了。加上長期以來網路安全專業人員的短缺,對於網路安全的未來,事情開始變得嚴峻。
如何避免Java安全漏洞閱讀有關安全漏洞的研究可能會使您心跳加速,但不要擔心:在應用程式安全性方面,Java開發人員處於有利地位。成千上萬的專業人員掃描該語言中的漏洞,我們很有可能知道該語言中很大比例的漏洞。那知識就是力量。
JavaWorld的最新文章為開發安全Java應用程式提供了13條規則。您也可以找到大量的文章和在特定環境下,諸如安全實施的Java白皮書對Java雲安全和Web應用程式安全的Java。讓我們考慮幾種減少您可能忽略的漏洞的方法。
移至DevSecOps工作流程減少Java程式碼漏洞的一種方法是轉移到DevSecOps工作流。這種型別的工作流程使安全成為開發過程所有階段的首要考慮。作為開發人員,我們經常忘記我們工作的組織的所有部門都使用(有時是改編)我們的軟體。如果您的營銷團隊決心破壞您的努力,那麼就很難使您的Web應用程式抵禦入侵。在開發過程中包括所有團隊,並確保安全性是專案各個方面的考慮因素。
評估工作流程安全性您還應該仔細考慮自己工作流程的安全性。您的Web應用程式本身可能是安全的,但是對於開發人員而言,漏洞增長最快的來源之一就是開發系統本身。如果您的開發系統被黑客入侵,它將成為將惡意程式碼注入您的軟體的門戶。為避免這種情況,請確保使用VPN加密所有內部通訊。另外,請確保實現加密的資料儲存。
結論儘管研究發現Java不如其他某些語言安全,但是開發人員應該花點時間來理解這一發現。較新的和較不常用的語言可能看起來更安全,但這可能是因為尚未發現許多漏洞,或者更糟的是,已找到但未報告。
儘管您應該了解風險並採取所有合理的預防措施來保護Java應用程式,但不要過於擔心排名。作為Java開發人員,您至少知道自己要面對的挑戰。