2023年9月24日 星期日

以SonarQube執行.netFramework專案的源碼掃描(白箱掃描)

SonarQube是一套白箱掃描工具,本例使用開源免費的Community版本,有關安裝方式可參考「在KALI Linux建置黑、白箱掃描系統(Arachni及SonarQube)

本文以SonarQube提供的範例「sonar-scanning-examples-master\sonarqube-scanner-msbuild\CSharpProject」做示範說明,若想掃描其他.netFramework專案,請依該專案環境、結構酌作調整,尤其工具及SDK的版本。

一、必要需求

(一)SonarScanner for .NET(本例選用sonar-scanner-msbuild-5.11.0.60783-net46.zip)

(二)MSBuild V14以上(VS Community 2019以上,本例選用VS Community 2022

(三)符合專案所需的.Net Framework(本例使用VS Community 2022自帶版本)

二、選用需求

將SonarScanner for .NET 執行檔和 MSBuild.EXE 的所在路徑加入 Path 環境變數,若不加入環境變數,執行命令時,必須手動指定完整路徑。

三、各項需求安裝

(一)安裝SonarScanner for .NET:

將所下載的 sonar-scanner-msbuild-5.11.0.60783-net46.zip 解壓縮到自選目錄,例如「C:\sonar-scanner-msbuild-5.11.0.60783-net46」

(二)安裝Visual Studio Community 2022:

1.下載 VisualStudioSetup.exe (VS Community 2022的安裝檔),並執行安裝。

2.安裝過程中,請加選「.NET Framework 4.6.2-4.7.1開發工具」和「.NET Framework 4.8.1開發工具」

四、檢測所需環境

(一)執行「C:\sonar-scanner-msbuild-5.11.0.60783-net46\SonarScanner.MSBuild.exe /?」會看到Sonar-scanner for .net的使用說明。

(二)執行「"C:\Program Files\Microsoft Visual Studio\2022\Community\MSBuild\Current\Bin\amd64\msbuild.exe" /version」會看到Msbuild.exe的版本。

五、執行掃描

(一)啟動SonarQube Scanner Server,假設位於「 http://192.168.232.153:9000

(二)以瀏覽器連線SonarQube Scanner Server,並建立掃描專案(如重掃描舊專案,請備妥 Project Token)

1. 由Projects頁面選擇「Create Project」->「Manually」

2.社群版只能選擇「Locally」

3.填入「Project display name」(專案名稱)及「Project key」(專案鍵名)

4.產生Project Token(專案身份代號)

5.請記下Project Token

6.選擇要被掃描的專案類型(.NET)

7.選擇.NET的型態(.NET Framework)

(三)複製剛剛建立掃描專案時,SonarQube所提供的三段命令,利用文字編輯器酌作調整,並以「Sonar_net-framework-example.bat」檔名儲存在.netFramework方案目錄下(保有.sln方案檔的目錄,本例為C:\sonar-scanning-examples-master\sonarqube-scanner-msbuild\CSharpProject)

(四)以系統管理員身分開啟命令提示字元,將工作目錄切換到.netFramework方案目錄

(五)直接執行「Sonar_net-framework-example.bat」(執行過程如下)

C:\>cd C:\sonar-scanning-examples-master\sonarqube-scanner-msbuild\CSharpProject
C:\sonar-scanning-examples-master\sonarqube-scanner-msbuild\CSharpProject>Sonar_net-framework-example.bat
SonarScanner for MSBuild 5.11
Using the .NET Framework version of the Scanner for MSBuild
Pre-processing started.
Preparing working directories...
08:56:22.776  Updating build integration targets...
<<部分訊息省略>>

SonarWriteProjectData: 
  Sonar: (SomeConsoleApplicationTest.csproj) Project processed successfully
<<部分訊息省略>>

建置成功。 
"C:\sonar-scanning-examples-master\sonarqube-scanner-msbuild\CSharpProject\SomeConsoleApplication.sln" (Rebuild 目標) (1)
 ->
"C:\sonar-scanning-examples-master\sonarqube-scanner-msbuild\CSharpProject\SomeConsoleApplication\SomeConsoleApplication.csproj" (Rebuild 目標) (2) ->
(CoreCompile 目標) ->
  C:\sonar-scanning-examples-master\sonarqube-scanner-msbuild\CSharpProject\SomeConsoleApplication\Program.cs(4,18): warning S1118: Add a 'protected' constructor or the 'static' keyword to the class declaration. (https://rules.sonarsource.com/csharp/RSPEC-1118) [C:\sonar-scanning-examples-master\sonarqube-scanner-msbuild\CSharpProject\SomeConsoleApplication\SomeConsoleApplication.csproj]
  C:\sonar-scanning-examples-master\sonarqube-scanner-msbuild\CSharpProject\SomeConsoleApplication\Program.cs(21,28): w
arning S3400: Remove this method and declare a constant for this value. (https://rules.sonarsource.com/csharp/RSPEC-3400) [C:\sonar-scanning-examples-master\sonarqube-scanner-msbuild\CSharpProject\SomeConsoleApplication\SomeConsoleApplication.csproj]
  C:\sonar-scanning-examples-master\sonarqube-scanner-msbuild\CSharpProject\SomeConsoleApplication\Program.cs(9,17): warning S2583: Change this condition so that it does not always evaluate to 'true'; some subsequent code is never executed. (https://rules.sonarsource.com/csharp/RSPEC-2583) [C:\sonar-scanning-examples-master\sonarqube-scanner-msbuild\CSharpProject\SomeConsoleApplication\SomeConsoleApplication.csproj]



    3 個警告
    0 個錯誤
經過時間 00:00:20.71
SonarScanner for MSBuild 5.11
Using the .NET Framework version of the Scanner for MSBuild
Post-processing started.
Calling the TFS Processor executable...
The TFS Processor has finished
Calling the SonarScanner CLI...
<<部分訊息省略>>

INFO: ------------------------------------------------------------------------
INFO: EXECUTION SUCCESS
INFO: ------------------------------------------------------------------------
INFO: Total time: 45.588s
INFO: Final Memory: 16M/57M
INFO: ------------------------------------------------------------------------
The SonarScanner CLI has finished
08:57:43.051  Post-processing succeeded.
C:\sonar-scanning-examples-master\sonarqube-scanner-msbuild\CSharpProject>


如果前面各步驟無誤,應該可以完成掃描,最後會看到「EXECUTION SUCCESS」。如果過程出現錯誤,請仔細研讀訊息,善用Google或ChatGPT找出解答。

完成掃描後,可在SonarQube Scanner Web UI看到專案結果~~


    關於 dotNet Core 專案的掃描,請參閱:以SonarQube掃描dotNet Core專案源碼(白箱掃描)

沒有留言:

張貼留言