如何使用SonarQube分析代碼并查找漏洞?
譯文【51CTO.com快譯】SonarQube是一款基于Web的工具,可幫助開發(fā)人員生成沒有安全問題、錯(cuò)誤、漏洞、異常和一般問題的代碼。如果您在開發(fā)一個(gè)小項(xiàng)目,那可能很容易,您可以仔細(xì)檢查代碼以發(fā)現(xiàn)任何問題。但如果您在開發(fā)一個(gè)大項(xiàng)目(或眾多小項(xiàng)目),可能沒時(shí)間梳理自己編寫的每一行代碼。
本文介紹如何使用SonarQube代碼分析平臺(tái)這款工具,以便您可以信任自己或別人編寫的代碼。
雖然您已安裝了一款很不錯(cuò)的基于Web的工具,但使用Sonarqube不像您想象的那么簡(jiǎn)單。如果您研讀一下說明文檔,可能會(huì)發(fā)現(xiàn)讓人有點(diǎn)迷糊。
別擔(dān)心,我會(huì)介紹使用Sonarqube掃描“Hello,World!”應(yīng)用程序(用Java編寫)的過程。由于我們最初安裝在Ubuntu Server 20.04上,我會(huì)繼續(xù)使用該平臺(tái)。如果您在不同的操作系統(tǒng)上使用Sonarqube,需要進(jìn)行必要的調(diào)整。
安裝Sonar-scanner
這是大多數(shù)用戶會(huì)迷糊的地方。使用Sonarqube進(jìn)行任何操作之前,必須將sonar-scanner應(yīng)用程序安裝在項(xiàng)目所在的機(jī)器上。我會(huì)使這個(gè)步驟變得更簡(jiǎn)單,將其安裝在托管Sonarqube的同一臺(tái)服務(wù)器上。以下是您的操作方法。
登錄到托管Sonarqube的服務(wù)器,使用以下命令安裝幾個(gè)依賴項(xiàng):
- sudo apt-get update && sudo apt-get install unzip wget nodejs -y
一旦安裝了那些依賴項(xiàng),使用以下命令創(chuàng)建一個(gè)新目錄:
- mkdir sonarqube
使用以下命令切換進(jìn)入該目錄:
- cd sonarqube
下載sonar-scan文件:
- wget https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-4.2.0.1873-linux.zip
解壓縮下載的文件:
- unzip sonar-scanner-cli-4.2.0.1873-linux.zip
最后,使用以下命令移動(dòng)新創(chuàng)建的文件夾:
- sudo mv sonar-scanner-4.2.0.1873-linux / opt / sonar-scanner
接下來,我們需要使用以下命令創(chuàng)建sonar-scan配置文件:
- sudo nano /opt/sonar-scanner/conf/sonar-scanner.properties
在該文件中,粘貼以下內(nèi)容:
- sonar.host.url=http://SERVER:9000
- sonar.sourceEncoding=UTF-8
其中SERVER是托管服務(wù)器的IP地址。
保存并關(guān)閉文件。
現(xiàn)在,我們將創(chuàng)建另一個(gè)配置文件,該文件將設(shè)置必要的$ PATH變量。執(zhí)行以下命令:
- udo nano /etc/profile.d/sonar-scanner.sh
在該文件中,粘貼以下內(nèi)容:
- #/bin/bash
- export PATH="$PATH:/opt/sonar-scanner/bin"
保存并關(guān)閉文件。
使用以下命令將sonar-scanner添加到您的路徑:
- source /etc/profile.d/sonar-scanner.sh
使用以下命令驗(yàn)證sonar-scanner在正常運(yùn)行:
- sonar-scanner -v
您應(yīng)該看到幾個(gè)工具的版本號(hào)。成功了!您可以開始進(jìn)行第一次掃描了。
如何掃描您的代碼?
不妨創(chuàng)建一個(gè)Hello, World!應(yīng)用程序示例。使用以下命令創(chuàng)建一個(gè)新目錄:
- mkdir Java
使用以下命令切換進(jìn)入該文件夾:
- cd Java
使用以下命令創(chuàng)建代碼文件:
- nano helloworld.java
在該文件中,粘貼以下內(nèi)容:
- // Your Hello, World! java application
- class HelloWorld {
- public static void main(String[] args) {
- System.out.println("Hello, World!");
- }
- }
保存并關(guān)閉文件。
現(xiàn)在,回到Sonarqube Web界面,創(chuàng)建一個(gè)新項(xiàng)目(圖1)。
圖1:點(diǎn)擊“創(chuàng)建新項(xiàng)目”,開始該過程
在隨后彈出的窗口(圖2)中,為新項(xiàng)目指定鍵和顯示內(nèi)容的名稱。
圖2:在Sonarqube中命名新項(xiàng)目
在下一個(gè)窗口(圖3)中,您必須為項(xiàng)目生成令牌。為令牌命名,然后點(diǎn)擊“生成”。
圖3:為新項(xiàng)目生成令牌
然后,您將不得不給令牌賦予另一個(gè)名稱,然后點(diǎn)擊“生成”。這將為您顯示令牌。復(fù)制并保存該令牌(因?yàn)橐院蟮膾呙鑼⑿枰?。
點(diǎn)擊“繼續(xù)”,進(jìn)入到下一步。在此窗口(圖4)中,選擇項(xiàng)目的構(gòu)建技術(shù)(我們將選擇“其他”)。
圖4:為您的項(xiàng)目選擇構(gòu)建技術(shù)
然后將提示您輸入有待掃描的操作系統(tǒng)。在本例中,我們將選擇Linux。選擇完畢后,您會(huì)看到在計(jì)算機(jī)上運(yùn)行的命令(圖5)。回到終端窗口,將該命令粘貼到窗口中。
圖5:Sonarqube顯示了您用于掃描的命令
從您的項(xiàng)目目錄內(nèi)運(yùn)行掃描,它將完成掃描工作。片刻之后(取決于項(xiàng)目的大小),它將結(jié)束掃描,掃描結(jié)果會(huì)顯示在Sonarqube Web GUI中(圖6)。
圖6:我們的掃描結(jié)果顯示了一個(gè)非常干凈的項(xiàng)目
明白了,這是一個(gè)簡(jiǎn)單的Hello,World!例子。如果您的項(xiàng)目較大,掃描會(huì)花費(fèi)較長(zhǎng)的時(shí)間,掃描結(jié)果可能不像圖6所示。因此,請(qǐng)閱讀Sonarqube報(bào)告,解決報(bào)告的所有問題。
這是確保您代碼盡可能干凈、沒有問題的好方法。別靠自己?jiǎn)为?dú)完成這項(xiàng)任務(wù)。僅需幾個(gè)額外的步驟,您就可以借助一個(gè)平臺(tái),更快速、更可靠地完成這項(xiàng)任務(wù)。
原文標(biāo)題:How to Analyze Code and Find Vulnerabilities with SonarQube,作者:Jack Wallen
【51CTO譯稿,合作站點(diǎn)轉(zhuǎn)載請(qǐng)注明原文譯者和出處為51CTO.com】