
NGINX背景介紹
NGINX開(kāi)源(發(fā)音為“engine x”)是全球最廣泛的Web服務(wù)器之一,為Netflix、Hulu、Pinterest和GitHub等站點(diǎn)提供支持,憑借其高性能、穩定性、豐富的功能集、簡(jiǎn)單的配置和資源消耗低等優(yōu)勢而廣受贊譽(yù)。 NGINX開(kāi)源系列的其它成員包括NGINX JavaScript(njs),一個(gè)向NGINX添加JavaScript支持的模塊; NGINX Unit,動(dòng)態(tài)應用服務(wù)器,支持用Perl、Python、Ruby、Node. Js、Go、Java和PHP.njs編寫(xiě)的應用。
所有三個(gè)NGINX開(kāi)源項目的開(kāi)發(fā)人員都使用新思科技Coverity Scan查找并修復其代碼中的缺陷。新思科技(Synopsys)提供免費在線(xiàn)服務(wù),并由與新思科技商業(yè)Coverity靜態(tài)分析工具使用的一樣的引擎提供支持,Scan可幫助開(kāi)源開(kāi)發(fā)人員識別代碼缺陷,以便快速、輕松地進(jìn)行補救。
NGINX軟件編寫(xiě)者兼聯(lián)合創(chuàng )始人Igor Sysoev在2014年的一次采訪(fǎng)中說(shuō):“我堅信開(kāi)源的力量。NGINX是一個(gè)針對非常具體問(wèn)題的實(shí)驗,即如何在單個(gè)現有服務(wù)器上處理更多客戶(hù)。原來(lái)這是一個(gè)普遍的問(wèn)題。當意識到NGINX確實(shí)有助于提高Web性能時(shí),我希望人們使用它,因此我將其設為開(kāi)源。”
NGINX開(kāi)放源代碼版本還可以用作反向代理、負載平衡器、郵件代理和HTTP緩存的Web服務(wù)器,為超過(guò)4億個(gè)網(wǎng)站提供支持,其中包括Netflix、Hulu、Pinterest和GitHub等品牌。Igor Sysoev在2011年與合作伙伴共同創(chuàng )立了NGINX,以提供對NGINX 開(kāi)源的正式支持,并提供商業(yè)版本NGINX Plus,該版本在NGINX 開(kāi)源中增加了企業(yè)級功能。
2019年,NGINX被應用安全和交付公司F5 Networks收購。如今,NGINX的開(kāi)源項目家族包括njs(向NGINX添加JavaScript支持的模塊)和NGINX Unit(動(dòng)態(tài)應用服務(wù)器)。
挑戰:確保開(kāi)源代碼的質(zhì)量及安全
NGINX聯(lián)合創(chuàng )始人兼工程副總裁Maxim Konovalov介紹道:“在創(chuàng )立NGINX不久之后,我們就將Coverity Scan集成到了CI / CD流程中。自2012年以來(lái),我們每天都在提交NGINX構建工件。”
Maxim Konovalov繼續說(shuō):“在許多情況下,NGINX充當互聯(lián)網(wǎng)前端,其安全性和穩定性對其用戶(hù)至關(guān)重要。我的團隊對提升代碼質(zhì)量孜孜不倦,并一直在尋找最佳實(shí)踐和工具以改進(jìn)代碼質(zhì)量。諸如Coverity Scan之類(lèi)的靜態(tài)代碼分析工具為我們提供了很大的幫助。”
NGINX將公司視為數百萬(wàn)個(gè)應用程序和網(wǎng)站的基礎技術(shù),并嚴格要求自己。代碼質(zhì)量和安全是NGINX企業(yè)精神的一部分。對于開(kāi)發(fā)實(shí)踐來(lái)說(shuō),有效的工具必不可少。
解決方案:采用Coverity Scan進(jìn)行靜態(tài)代碼分析
人們通常認為大多數軟件漏洞是因為惡意攻擊,但其實(shí)不然,這主要是由于代碼錯誤導致的。GitHub發(fā)布的2020年度安全報告“2020 State of the Octoverse”顯示,GitHub從2019年到2020年發(fā)送警報的漏洞中,有83%是由于編碼錯誤引起的,而不是惡意攻擊。
但是惡意攻擊確實(shí)會(huì )利用代碼中的缺陷,開(kāi)發(fā)人員需要使用主動(dòng)檢測工具來(lái)發(fā)現他們編寫(xiě)的代碼中的錯誤。靜態(tài)分析根據一組編碼規則檢查源代碼,以發(fā)現常見(jiàn)的編碼錯誤。已在scan.coverity.com注冊項目的開(kāi)源開(kāi)發(fā)人員可以免費使用這項服務(wù),與新思科技的商業(yè)Coverity靜態(tài)分析工具 所使用的引擎是相同的,該功能可幫助開(kāi)源開(kāi)發(fā)人員識別代碼缺陷,以便快速、輕松地進(jìn)行補救。Linux Foundation在2020年的一份開(kāi)源貢獻者的報告中指出,受訪(fǎng)者“絕大多數都引用Coverity Scan和Clang安全檢查器”作為主要靜態(tài)分析工具。
成效:掃描了658,000行代碼,缺陷密度為0.02%
2021年1月, Coverity Scan為NGINX分析了658,665行代碼,并發(fā)現了各種代碼缺陷,其中包括兩個(gè)CWE Top 25缺陷。由于F5 Networks定期使用Coverity Scan,NGINX項目的缺陷密度(每1,000行代碼的缺陷數)僅為0.02%。
Maxim Konovalov贊賞道:“Coverity Scan為我們增加價(jià)值。我經(jīng)常推薦Coverity Scan及其在代碼提交中提供特定缺陷ID的功能。實(shí)際上,我是FreeBSD提交者小組的成員,我們也使用Coverity Scan進(jìn)行FreeBSD的代碼分析。”