5 款阿里常用代碼檢測工具,免費用!


簡介: 5 款阿里常用代碼檢測工具免費體驗,僅需 2 步,Cherry鍵盤、公仔抱回家,100%拿獎!

作者 | 喻陽

面臨問題

在日常研發過程中,我們通常面臨的代碼資產問題主要分為兩大類:代碼質量問題和代碼安全漏洞。

1、代碼質量問題

代碼質量其實是一個老生常談的話題,但問題是大家都知道它很重要,卻又不知道如何去提升和維護這一團隊的共同財產。一方面開發人員可能為了功能及時上線,疏忽了對質量的把控,另一方面開發人員編碼習慣和程序理解風格各異。

長期下來代碼質量下降通常會自成因果,因為業務壓力大而趨於下降,又因此開發效率下降,進一步加大業務壓力,導致惡性循環。

2、代碼安全問題

安全類問題往往隱藏在缺乏安全意識的編碼邏輯和未經檢測或維護的開源依賴組件中,難以在日常開發和代碼評審中被及時察覺。

代碼安全問題也可以分兩個方面進行分析:

  • 編碼安全問題,即:安全規范類問題,通過避免不符合規范的代碼進入企業代碼庫,減少隱私數據泄露、注入類風險、安全策略漏洞的出現。
  • 依賴安全問題,即:開源依賴三方組件引入的安全漏洞。根據 Synopsys 2020 開源安全報告顯示,99%以上的組織使用了開源技術。使用開源組件本身帶來的技術交流和站在巨人肩膀上協作、降低開發成本、加快迭代周期、提高軟件質量等優勢已經不必贅述,但是,開源軟件帶來一系列便利的同時,也暗藏大量安全風險,據審計,75%的代碼庫存在安全漏洞,其中 49%包含高危問題,另外 82%的代碼庫仍在使用超過 4 年的 outdated 組件。

代碼安全類問題,一方面也需要進行准入性檢查,根據業務場景和規范配置安全編碼規范檢測和卡點。另一方面需要定期維護,對於新爆發出的安全漏洞進行及時察覺並修復。

5 款阿里常用代碼監測工具推薦

1、代碼質量檢測

  • Java 代碼規約檢測

阿里巴巴在實踐過程中,各個組織由於歷史隔閡和業務風格差異,工程結構差別很大,代碼風格迥異,規范不一,溝通成本大,合作效率低,維護成本高。集團發展到現在的規模,需要專業化的技術集團軍迭代式、集約式發展,而不是動輒重復造輪,而真正專業化的團隊一定會有統一的開發規約,這代表效率、共鳴、情懷、可持續。

基於上述背景,阿里制定了《阿里巴巴 Java 開發手冊》,作為阿里內部 Java 工程師所遵循的開發規范,涵蓋編程規約、單元測試規約、異常日志規約、MySQL 規約、工程規約、安全規約等。這是近萬名阿里 Java 技術精英的經驗總結,並經歷了多次大規模一線實戰檢驗及完善。

制訂交通法規表面上是要限制行車權,實際上是保障公眾的人身安全。試想如果沒有限速,沒有紅綠燈,沒有靠右行駛條款,誰還敢上路。同理,對軟件來說,開發規約絕不是消滅代碼內容的創造性、優雅性,而是限制過度個性化,推行相對標准化,以一種普遍認可的方式一起做事。

因此,代碼規約的目標是:1、碼出高效:標准統一,提升溝通效率和研發效能。2、碼出質量:防患未然,提升質量意識和系統可維護性,降低故障率。3、碼出情懷:工匠精神,追求極致的卓越精神,打磨精品代碼。

代碼規約通過 IDE 檢測插件、流水線集成測試、代碼評審集成等工具手段,深度融入了阿里巴巴的各種開發活動中。與此同時,在雲效代碼托管平台 Codeup 中,也內置集成了 Java 代碼規約檢測能力,為開發人員在代碼提交和代碼評審階段提供更為方便的快速檢查。

  • 代碼智能補丁推薦

缺陷檢測和補丁推薦幾十年來一直是軟件工程領域的難題,又是研究者和一線開發者最為關心的問題之一,這里講的缺陷不是網絡漏洞、系統缺陷,而是隱藏在代碼中的缺陷。幫助開發者識別這些缺陷,並進行修復,能夠大幅提升軟件質量。

基於業界和學術界較為流行的缺陷檢測手段,並分析和規避其局限性,阿里巴巴 Codeup 的算法工程師們提出了一種新的算法,實現更加精准和高效的分析代碼缺陷並推薦優化方案,該算法已被國際軟件工程大會(ICSE)收錄。

1.jpg

1、根據 commit message 中的關鍵詞找出修復型的 commit,只取涉及文件小於 5 個的 commit(涉及文件過多的 commit 可能會稀釋修復行為)。這個步驟十分依賴開發者良好的 commit習慣,希望開發者能用好 commit,寫好 message。

2、從這些修復型 commit 中以文件級別提取刪除內容和新增內容,即 Defect and Patch pairs(DP Pair),這一步難免會有很大的噪聲。

3、利用改進的 DBSCAN 方法對 buggy 和 patch 對同時聚類,將相似的缺陷和補丁代碼聚在一起。(也可以做片段級的聚類)通過將相似的缺陷和修復做聚類,減少了上一步留下的大量噪聲,同時歷史代碼提交中大家共同犯過的錯具有很強的借鑒意義。

4、利用自研的模板提取方法總結缺陷代碼和補丁代碼,並根據不同的變量來適配上下文。

代碼補丁推薦服務目前應用於合並請求的代碼自動掃描場景,在代碼評審過程中檢測可優化代碼片段並給出優化建議,將歷史評審中的人工經驗沉淀下來持續提升企業代碼質量。

2、代碼安全檢測

  • 敏感信息檢測

近年來,業內發生多起敏感信息(API Key、Database credential、OAuth token 等)通過某些站點被無意識地泄露出去的事件,給企業帶來了安全風險,甚至直接的經濟損失。

在我們的實踐過程中,我們也面臨了類似的問題,硬編碼問題出現非常高頻,而又缺乏有效的識別機制。因此開發者和企業管理者亟需一款穩定健全的敏感信息檢測方法和系統。通過調研我們了解到,目前已有的敏感信息檢測工具大多單純使用規則匹配或信息熵技術,導致其召回率或准確率難以滿足預期。因此我們在規則匹配和信息熵技術的基礎上,結合上下文語義,提出了一款采用多層檢測模型的敏感信息檢測工具——SecretRadar。

2.jpg

SecretRadar 的技術實現思路主要分為三層,第一層采用規則匹配這種傳統敏感信息識別技術,規則匹配具有良好的准確度和擴展性,但是非常依賴比較固化的長度、前綴、變量名,難以應對不同開發者的不同編碼風格,容易造成漏報。針對難以固定規則捕捉的場景,在第二層我們采用了信息熵算法。信息熵算法用於衡量代碼行混亂程度,對隨機生成型密鑰和隨機身份信息識別效果良好。但信息熵算法也有其局限性,召回率提升的同時誤報也增多了。因此在第三層我們采用了模板聚類和上下文語義分析等方法進行過濾優化,針對信息熵結果聚合提取常見關鍵字,結合上下文語義和當前語法結構提升模型准確率。

敏感信息檢測工具不止服務我們內部開發同學,在雲效平台上也支持了超過 2 萬代碼庫、3 千家企業,幫助開發者解決了超過 9 萬硬編碼問題。

  • 源碼漏洞檢測

阿里巴巴采用 Sourcebrella Pinpoint 源傘檢測引擎,進行源碼漏洞檢測,主要涉及到注入類風險和安全策略類風險檢測。

源傘檢測引擎是香港科技大學 Prism 研究組在過去十年的時間內的技術研究成果。該引擎吸收了國際上近十年的軟件驗證技術研究成果,並且加以改進和創新,獨立設計和實現了一套技術領先的軟件驗證系統。其主要驗證方式是將編程語言翻譯成一階邏輯和線性代數等數學表達,通過形式化驗證技術推理缺陷成因。迄今為止,一共發表了四篇核心技術相關的論文,一篇 PLDI 和三篇 ICSE,研究型的同學可以點擊文末鏈接閱讀。

    • 源傘檢測引擎能夠在活躍度比較高的大型開源項目中發現隱藏超過 10 年的缺陷,以 MySQL 檢測 [5] 為例,這些缺陷都是市面上其他檢查工具無法掃描出來的,並且能夠在 1.5 小時完成 200 萬行大型開源項目的檢測。在保持掃描的高效率同時,還能夠將誤報率控制在 15%左右。對於復雜且體量龐大的分析項目來說,源傘檢測引擎所表現的掃描效率和誤報率在業內也處於領先水平。

「源碼漏洞檢測」集成了源傘檢測引擎的安全分析能力,能夠在分析精度、速度、深度等方面均衡得到較好的分析結果,具備的核心優勢:

1、支持分析字節碼,二三方包的代碼邏輯都不會遺漏;

2、擅長跨函數長調用鏈路的邏輯分析;

3、可以處理引用、指針等帶來的間接數據修改;

4、精度高,相比於同類工具,如 Clang、Infer,在精度和有效問題識別上表現更佳;

5、性能好,目前單應用平均 5 分鍾左右分析完畢;

3.jpg

源傘檢測引擎可以精確的追蹤代碼中的數據流向,擁有高深度高精度的函數調用鏈分析能力,可以找到跨越多層函數的深度問題。在發現缺陷的同時還能給出問題觸發的過程,完整展示相關的控制流以及數據流,這樣可以輔助開發者快速理解和修復問題,在軟件開發早期更低成本地提高軟件質量,大幅減少生產成本,提高研發效能。
  • 依賴包漏洞檢測

我們期望對於開源組件的安全可信程度,為開發者建立一種有效的檢測和管理機制,因此我們實現了依賴包漏洞檢測服務和依賴包安全問題報表。在實踐過程中,開發者普遍反映依賴包漏洞修復成本大多高於修復自身編碼漏洞,從而不願意或難於處理此類問題。究其原因,一方面是大部分漏洞並非直接引入,而是依賴的第三方組件又間接依賴了其它組件,另一方面是不確定具體哪個版本是干凈可用且兼容的。

4.jpg

為了降低開發者的修復難度,我們對依賴項的引用關系進行了進一步識別分析,清晰的標注出直接依賴和間接依賴,並定位到具體的依賴包引入文件,方便開發者快速找到關鍵問題位置。同時,通過對漏洞數據的聚合,智能推薦修復漏洞的版本升級建議,因為一個依賴可能對應多個漏洞問題,開發者可以針對建議評估是否接受采用。通過分析不同版本間的 API 變更和代碼調用鏈路,衡量版本升級成本,為開發人員自動創建修復評審,最大程度的幫助開發人員更高效地維護代碼安全。

無論是代碼質量檢測還是代碼安全檢測,以上 5 款阿里代碼自動檢測工具,開發者們都可以在雲效 Codeup 內免費體驗。

檢測服務應用

1、代碼提交

檢測服務的最直接的應用便是在代碼提交場景中,企業可以根據業務場景和規范,制定和配置不同項目的檢查方案。當開發者將代碼變更推送至服務端,自動觸發當前代碼庫配置的檢測服務,可以為開發者檢查當前 commit 版本中的全量問題,幫助開發者及早發現新增問題,並確認存量問題的解決情況。通過接入上述檢測服務,可以從代碼規范、代碼質量、代碼安全等多個維度進行測試左移,在開發人員剛完成編碼時就進行快速檢測和反饋。

2、代碼評審

在企業項目協同中,開發者多以合並請求的方式將特性分支代碼合入主干分支,合並請求過程需要項目開發負責人或模塊負責人進行代碼評審和人工檢查。一方面人工審查代碼需要投入較大精力,另一方面人工審查難以覆蓋代碼各個維度的潛在問題。因此,通過合理配置檢測服務,可以極大地減少人工評審的工作量,加速代碼評審的工作過程。同時,通過豐富、篩選、沉淀檢測規則集和人工經驗,檢測服務可以更加貼合企業的業務場景進行卡點,避免不符合規范或存在風險的代碼進入企業代碼庫。

3、代碼度量

檢測服務除了在代碼提交和代碼評審階段幫助開發者及早發現問題並解決問題,還可以幫助管理者進行企業代碼質量度量和風險可視化。通過建設企業級報表服務和項目任務管理,可以更為直觀地度量項目演進過程中的安全問題和質量問題。

活動推薦

代碼捉蟲-PC.jpg

5 款阿里常用代碼檢測工具免費體驗,僅需 2 步,Cherry鍵盤、公仔抱回家,100%拿獎! 

都 2021 年了,你還認為代碼檢測=語法/風格掃描?

大廠每年數百萬采購的掃描軟件,都在采購什么?如何不花錢白嫖?

落地 DevOps 的第 2 步是什么?

什么是接入成本最低的質量和安全提升工具?

雲效 DevOps 實驗室特推出【1 分鍾代碼自動捉蟲】活動

1-3 分鍾,給你的代碼做個全身體檢吧。


體驗完成,還可抽 Cherry 機械鍵盤、阿里雲定制 GIt 命令鼠標墊、積木星球等,1000 分禮品,100%中獎

點擊下方鏈接,立刻參與活動!注:本活動僅限雲效新用戶參加

https://developer.aliyun.com/adc/series/activity/bugdetect

原文鏈接
本文為阿里雲原創內容,未經允許不得轉載。 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM