1. sonar安裝
1.1 簡(jiǎn)介
sonar是一款靜態(tài)代碼質(zhì)量分析工具,支持Java、Python、PHP、JavaScript、CSS等25種以上的語言,而且能夠集成在IDE、Jenkins、Git等服務(wù)中,方便隨時(shí)查看代碼質(zhì)量分析報(bào)告。
? 通過插件機(jī)制,Sonar 可以集成不同的測(cè)試工具,代碼分析工具,以及持續(xù)集成工具,比如findbugs、Jenkins,通過不同的插件對(duì)這些結(jié)果進(jìn)行再加工處理,通過量化的方式度量代碼質(zhì)量的變化,從而可以方便地對(duì)不同規(guī)模和種類的工程進(jìn)行代碼質(zhì)量管理。
? 簡(jiǎn)單來說,SonarQube是一個(gè)質(zhì)量平臺(tái),用于收集質(zhì)量數(shù)據(jù)(代碼掃描結(jié)果、測(cè)試覆蓋率等),并對(duì)數(shù)據(jù)進(jìn)行各維度的統(tǒng)計(jì)分析。
1.1.1 客戶端
Sonar的客戶端共有四種
- Sonar-Scanner:一個(gè)獨(dú)立的掃描器,通過簡(jiǎn)單的命令就能對(duì)項(xiàng)目進(jìn)行靜態(tài)掃描,并將掃描結(jié)果上傳至SonarQube
- sonar maven:一個(gè)maven插件,能通過maven命令執(zhí)行靜態(tài)掃描。
- sonar ant插件:ant上的插件。
- sonar IDE插件:可以直接集成到IDE中(比如IntelliJ)。
1.1.2 sonar 版本區(qū)分
SonarQube除了開源的社區(qū)版之外,還有開發(fā)者版、企業(yè)版和數(shù)據(jù)中心版等不同的發(fā)行版本,以滿足不同類型的客戶需求,以下是根據(jù)SonarSource官網(wǎng)整理的各個(gè)版本之間的差異。
1.1.2.1 社區(qū)版
? 社區(qū)版就是通常大家所說的開源版本的SonarQube,通過其核心的代碼質(zhì)量和安全問題的掃描能力,以及質(zhì)量門禁的功能,成為了目前代碼靜態(tài)掃描事實(shí)上的標(biāo)準(zhǔn)。
據(jù)有以下功能
- 60多個(gè)插件
- DevOps工具鏈集成
- 代碼質(zhì)量和安全
- 支持15種語言
- 支持5種IDE
?
? 此外,開源版支持15種常見的開發(fā)語言,尤其是在互聯(lián)網(wǎng)行業(yè)中廣泛使用Java和JavaScript的情況下,通過與構(gòu)建工具(如maven/gradle插件)以及持續(xù)集成工具(如Jenkins)的集成,基本能滿足個(gè)人和團(tuán)隊(duì)的日常代碼掃描所需。
1.1.2.2 開發(fā)者版
當(dāng)然,在開源社區(qū)版本的基礎(chǔ)上,SonarQube還提供了開發(fā)者版。在全部社區(qū)版功能的基礎(chǔ)上,新增了以下的功能
- Branch analysis(分支分析)
- Pull Request decoration(PR/MR注釋)
- Detection of injection vulnerabilities(注入漏洞探測(cè))
- SonarLint notifications(SonarLint通知)
- 22 Programming Languages Covered(尤其新增了c/c++/plsql)
- Developer Edition is available up to 20M Lines of Code.
對(duì)于金融行業(yè)來說,開發(fā)者版本支持了C/C++以及Oracle PL/SQL這三種語言,這樣就為核心交易類系統(tǒng)以及遺留的業(yè)務(wù)系統(tǒng)展開代碼掃描掃清了障礙。
? 另外一個(gè)非常有用的功能是多分支分析,社區(qū)版主要適合主干開發(fā)的團(tuán)隊(duì),而目前Gitlab/Github-Flow以及特性分支等也非常流行,具備多分支分析能力,讓SonarQube與現(xiàn)有團(tuán)隊(duì)的工作模式更加貼合。
1.1.2.3 企業(yè)版
對(duì)于大型跨國(guó)公司或者是集團(tuán)性企業(yè)來說,開發(fā)者版就有些不夠用了。當(dāng)然,只要肯花錢,SonarQube也還有適用的版本。
- Portfolio Management(項(xiàng)目集管理)
- Executive Reporting(管理層報(bào)告)
- Security Reports(安全報(bào)告)
- Project Transfer(項(xiàng)目匯聚)
- 27 Programming Languages Covered
- Enterprise Edition is available up to 100M Lines of Code.
? 從上述特性清單來看,企業(yè)版主要是關(guān)注于管理層面的增強(qiáng)了。例如,多個(gè)應(yīng)用可以匯聚成一條產(chǎn)品線或者事業(yè)部,通過其項(xiàng)目集管理也可以把若干個(gè)SonarQube項(xiàng)目匯聚到一個(gè)統(tǒng)計(jì)口徑之下。
1.2 安裝部署
1.2.1 修改文件句柄數(shù)
系統(tǒng)配置,避免啟動(dòng)問題
# 系統(tǒng)配置,避免啟動(dòng)問題
echo "vm.max_map_count=262144" >> /etc/sysctl.conf
sysctl -p
1.2.2 創(chuàng)建掛載目錄
mkdir -p ~/sonarqube && cd ~/sonarqube
# 創(chuàng)建所有的sonarqube映射文件
mkdir -p ~/sonarqube/postgres && \
mkdir -p ~/sonarqube/data && \
mkdir -p ~/sonarqube/extensions && \
mkdir -p ~/sonarqube/logs && \
mkdir -p ~/sonarqube/conf
# 創(chuàng)建數(shù)據(jù)庫掛載
mkdir -p ~/sonarqube/postgresql &&\
mkdir -p ~/sonarqube/datasql
# 目錄設(shè)置為 777 權(quán)限,避免權(quán)限問題
chmod 777 ~/sonarqube/*
1.2.3 創(chuàng)建docker-compose.yml
vi ~/sonarqube/docker-compose.yml
version: '3'
services:
postgres:
image: postgres:9.6.24
restart: always
container_name: sonarqube_postgres
ports:
- 5432:5432
volumes:
- ~/sonarqube/postgresql/:/var/lib/postgresql
- ~/sonarqube/datasql/:/var/lib/postgresql/data
environment:
TZ: Asia/Shanghai
POSTGRES_USER: sonar
POSTGRES_PASSWORD: sonar
POSTGRES_DB: sonar
networks:
- sonar-network
sonar:
image: sonarqube:8.9.9-community
restart: always
container_name: sonarqube
depends_on:
- postgres
volumes:
- ~/sonarqube/extensions:/opt/sonarqube/extensions
- ~/sonarqube/logs:/opt/sonarqube/logs
- ~/sonarqube/data:/opt/sonarqube/data
- ~/sonarqube/conf:/opt/sonarqube/conf
ports:
- 9000:9000
environment:
SONARQUBE_JDBC_USERNAME: sonar
SONARQUBE_JDBC_PASSWORD: sonar
SONARQUBE_JDBC_URL: jdbc:postgresql://postgres:5432/sonar
networks:
- sonar-network
networks:
sonar-network:
driver: bridge
1.2.4 啟動(dòng)
docker-compose up -d
1.2.4.1 訪問測(cè)試
瀏覽器訪問:ip+端口,如:192.168.245.139:9000,賬號(hào)密碼都是
admin
登錄后進(jìn)入項(xiàng)目頁面
1.2.5 安裝插件
可以進(jìn)入應(yīng)用市場(chǎng)下載一些常見的插件,一般是通過github下載,可能出現(xiàn)現(xiàn)在不下來的情況,可以手動(dòng)下載后將jar包放進(jìn)對(duì)應(yīng)的
extensions/downloads
下載目錄就可以,然后點(diǎn)擊install就可以進(jìn)行安裝了
1.2.5.1 漢化插件
Chinese Pack是一個(gè)sonar的漢化插件,安裝后就可以體驗(yàn)中文界面了,以下是各版本的對(duì)應(yīng)關(guān)系
SonarQube | 9.0 | 9.1 | 9.2 | |||||||
sonar-l10n-zh | 9.0 | 9.1 | 9.2 | |||||||
SonarQube | 8.0 | 8.1 | 8.2 | 8.3 | 8.4 | 8.5 | 8.6 | 8.7 | 8.8 | 8.9 |
sonar-l10n-zh | 8.0 | 8.1 | 8.2 | 8.3 | 8.4 | 8.5 | 8.6 | 8.7 | 8.8 | 8.9 |
SonarQube | 7.0 | 7.1 | 7.2 | 7.3 | 7.4 | 7.5 | 7.6 | 7.7 | 7.8 | 7.9 |
sonar-l10n-zh | 1.20 | 1.21 | 1.22 | 1.23 | 1.24 | 1.25 | 1.26 | 1.27 | 1.28 | 1.29 |
SonarQube | 6.0 | 6.1 | 6.2 | 6.3 | 6.4 | 6.5 | 6.6 | 6.7 | ||
sonar-l10n-zh | 1.12 | 1.13 | 1.14 | 1.15 | 1.16 | 1.17 | 1.18 | 1.19 | ||
SonarQube | 5.4 | 5.5 | 5.6 | |||||||
sonar-l10n-zh | 1.9 | 1.10 | 1.11 | |||||||
SonarQube | 4.0 | 4.1 | ||||||||
sonar-l10n-zh | 1.7 | 1.8 | ||||||||
SonarQube | 3.1 | 3.2 | 3.3 | 3.4 | 3.5 | 3.6 | 3.7 | |||
sonar-l10n-zh | 1.0 | 1.1 | 1.2 | 1.3 | 1.4 | 1.5 | 1.6 |
下載地址:https://github.com/xuhuisheng/sonar-l10n-zh,找到對(duì)應(yīng)的版本下載后上傳到dowload文件夾
在應(yīng)用市場(chǎng)進(jìn)行重啟即可
再次訪問就變成了中文界面了
1.3 靜態(tài)分析插件介紹
1.3.1 什么是靜態(tài)代碼分析
? 靜態(tài)代碼分析是指無需運(yùn)行被測(cè)代碼,僅通過分析或檢查源程序的語法、結(jié)構(gòu)、過程、接口等來檢查程序的正確性,找出代碼隱藏的錯(cuò)誤和缺陷,如參數(shù)不匹配,有歧義的嵌套語句,錯(cuò)誤的遞歸,非法計(jì)算,可能出現(xiàn)的空指針引用等等。
? 在軟件開發(fā)過程中,靜態(tài)代碼分析往往先于動(dòng)態(tài)測(cè)試之前進(jìn)行,同時(shí)也可以作為制定動(dòng)態(tài)測(cè)試用例的參考。統(tǒng)計(jì)證明,在整個(gè)軟件開發(fā)生命周期中,30% 至 70% 的代碼邏輯設(shè)計(jì)和編碼缺陷是可以通過靜態(tài)代碼分析來發(fā)現(xiàn)和修復(fù)的。
? 但是,由于靜態(tài)代碼分析往往要求大量的時(shí)間消耗和相關(guān)知識(shí)的積累,因此對(duì)于軟件開發(fā)團(tuán)隊(duì)來說,使用靜態(tài)代碼分析工具自動(dòng)化執(zhí)行代碼檢查和分析,能夠極大地提高軟件可靠性并節(jié)省軟件開發(fā)和測(cè)試成本。
1.3.1.1 靜態(tài)代碼分析優(yōu)勢(shì)
- 幫助程序開發(fā)人員自動(dòng)執(zhí)行靜態(tài)代碼分析,快速定位代碼隱藏錯(cuò)誤和缺陷。
- 幫助代碼設(shè)計(jì)人員更專注于分析和解決代碼設(shè)計(jì)缺陷。
- 顯著減少在代碼逐行檢查上花費(fèi)的時(shí)間,提高軟件可靠性并節(jié)省軟件開發(fā)和測(cè)試成本。
1.3.2 java靜態(tài)分析插件
1.3.2.1 Checkstyle
? Checkstyle 是 SourceForge 的開源項(xiàng)目,通過檢查對(duì)代碼編碼格式,命名約定,Javadoc,類設(shè)計(jì)等方面進(jìn)行代碼規(guī)范和風(fēng)格的檢查,從而有效約束開發(fā)人員更好地遵循代碼編寫規(guī)范。
? 此外,Checkstyle 支持用戶根據(jù)需求自定義代碼檢查規(guī)范,在配置面板中,用戶可以在已有檢查規(guī)范如命名約定,Javadoc,塊,類設(shè)計(jì)等方面的基礎(chǔ)上添加或刪除自定義檢查規(guī)范。
檢查內(nèi)容
- Javadoc 注釋:檢查類及方法的 Javadoc 注釋
- 命名約定:檢查命名是否符合命名規(guī)范
- 標(biāo)題:檢查文件是否以某些行開頭
- Import 語句:檢查 Import 語句是否符合定義規(guī)范
- 代碼塊大小,即檢查類、方法等代碼塊的行數(shù)
- 空白:檢查空白符,如 tab,回車符等
- 修飾符:修飾符號(hào)的檢查,如修飾符的定義順序
- 塊:檢查是否有空塊或無效塊
- 代碼問題:檢查重復(fù)代碼,條件判斷,魔數(shù)等問題
- 類設(shè)計(jì):檢查類的定義是否符合規(guī)范,如構(gòu)造函數(shù)的定義等問題
1.3.2.2 FindBugs
? FindBugs 是由馬里蘭大學(xué)提供的一款開源 Java 靜態(tài)代碼分析工具,F(xiàn)indBugs 通過檢查類文件或 JAR 文件,將字節(jié)碼與一組缺陷模式進(jìn)行對(duì)比從而發(fā)現(xiàn)代碼缺陷,完成靜態(tài)代碼分析,F(xiàn)indBugs 既提供可視化 UI 界面,同時(shí)也可以作為 Idea 插件使用。
檢查內(nèi)容
- Bad practice 壞的實(shí)踐:常見代碼錯(cuò)誤,用于靜態(tài)代碼檢查時(shí)進(jìn)行缺陷模式匹配
- Correctness 可能導(dǎo)致錯(cuò)誤的代碼,如空指針引用等
- 國(guó)際化相關(guān)問題:如錯(cuò)誤的字符串轉(zhuǎn)換
- 可能受到的惡意攻擊,如訪問權(quán)限修飾符的定義等
- 多線程的正確性:如多線程編程時(shí)常見的同步,線程調(diào)度問題。
- 運(yùn)行時(shí)性能問題:如由變量定義,方法調(diào)用導(dǎo)致的代碼低效問題。
1.3.2.3 PMD
? PMD 是由 DARPA 在 SourceForge 上發(fā)布的開源 Java 代碼靜態(tài)分析工具,PMD 通過其內(nèi)置的編碼規(guī)則對(duì) Java 代碼進(jìn)行靜態(tài)檢查,主要包括對(duì)潛在的 bug,未使用的代碼,重復(fù)的代碼,循環(huán)體創(chuàng)建新對(duì)象等問題的檢驗(yàn)。
檢查內(nèi)容
- 可能的 Bugs:檢查潛在代碼錯(cuò)誤,如空 try/catch/finally/switch 語句
- 未使用代碼(Dead code):檢查未使用的變量,參數(shù),方法
- 復(fù)雜的表達(dá)式:檢查不必要的 if 語句,可被 while 替代的 for 循環(huán)
- 重復(fù)的代碼:檢查重復(fù)的代碼
- 循環(huán)體創(chuàng)建新對(duì)象:檢查在循環(huán)體內(nèi)實(shí)例化新對(duì)象
- 資源關(guān)閉:檢查 Connect,Result,Statement 等資源使用之后是否被關(guān)閉掉
1.3.3 幾種插件對(duì)比
1.3.3.1 技術(shù)對(duì)比
Java 靜態(tài)分析工具 | 分析對(duì)象 | 應(yīng)用技術(shù) |
---|---|---|
Checkstyle | Java 源文件 | 缺陷模式匹配 |
FindBugs | 字節(jié)碼 | 缺陷模式匹配;數(shù)據(jù)流分析 |
PMD | Java 源代碼 | 缺陷模式匹配 |
1.3.3.2 分析對(duì)比
代碼缺陷分類 | 示例 | Checkstyle | FindBugs | PMD |
---|---|---|---|---|
引用操作 | 空指針引用 | √ | √ | √ |
對(duì)象操作 | 對(duì)象比較(使用 == 而不是 equals) | √ | √ | |
表達(dá)式復(fù)雜化 | 多余的 if 語句 | √ | ||
數(shù)組使用 | 數(shù)組下標(biāo)越界 | |||
未使用變量或代碼段 | 未使用變量 | √ | √ | |
資源回收 | I/O 未關(guān)閉 | √ | ||
方法調(diào)用 | 未使用方法返回值 | √ | ||
代碼設(shè)計(jì) | 空的 try/catch/finally 塊 | √ |
2. Sonar使用
2.1 Maven代碼掃描
2.1.1 創(chuàng)建項(xiàng)目
點(diǎn)擊創(chuàng)建項(xiàng)目就可以創(chuàng)建一個(gè)項(xiàng)目,為項(xiàng)目創(chuàng)建令牌
選擇手工創(chuàng)建項(xiàng)目即可
點(diǎn)擊手工后,輸入項(xiàng)目標(biāo)識(shí)符以及項(xiàng)目名稱,標(biāo)識(shí)符是為了區(qū)分不同的項(xiàng)目,輸入完成后,在輸入令牌點(diǎn)擊創(chuàng)建即可
創(chuàng)建令牌后,會(huì)生成一個(gè)token,這個(gè)token是需要保存的,只會(huì)在這里顯示一次
2.1.2 Maven 分析項(xiàng)目
2.1.2.1 生成sonar分析的命令
點(diǎn)擊后面的
Maven
分析項(xiàng)目,會(huì)生成一個(gè)maven分析項(xiàng)目的命令保存下來
mvn sonar:sonar \
-Dsonar.projectKey=taxi \
-Dsonar.host.url=http://192.168.245.139:9000 \
-Dsonar.login=7aafcd2c4da5c2e80bde66a3a0970d3278d359d6
2.1.2.2 項(xiàng)目配置 Sonar
我們需要配置 Maven 的 setting.xml文件,增加 sonarQube 配置
<!-- Apache Maven 配置 -->
<pluginGroups>
<pluginGroup>com.spotify</pluginGroup>
<!-- 添加一個(gè)maven掃描的配置 -->
<pluginGroup>org.sonarsource.scanner.maven</pluginGroup>
</pluginGroups>
<profiles>
<profile>
<id>sonar</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<!-- 配置 Sonar Host地址,默認(rèn):http://localhost:9000 -->
<sonar.host.url>
http://192.168.245.139:9000
</sonar.host.url>
</properties>
</profile>
</profiles>
2.1.2.3 單元測(cè)試覆蓋率
項(xiàng)目中一般要求需要編寫測(cè)試用例,可以使用sonar統(tǒng)計(jì)單元測(cè)試的覆蓋率,需要在maven項(xiàng)目由以下配置
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.8.8</version>
<executions>
<execution>
<id>prepare-agent</id>
<goals>
<goal>prepare-agent</goal>
</goals>
</execution>
<execution>
<id>report</id>
<phase>prepare-package</phase>
<goals>
<goal>report</goal>
</goals>
</execution>
<execution>
<id>post-unit-test</id>
<phase>test</phase>
<goals>
<goal>report</goal>
</goals>
<configuration>
<dataFile>target/jacoco.exec</dataFile>
<outputDirectory>target/jacoco-reports</outputDirectory>
</configuration>
</execution>
</executions>
<configuration>
<systemPropertyVariables>
<jacoco-agent.destfile>target/jacoco.exec</jacoco-agent.destfile>
</systemPropertyVariables>
</configuration>
</plugin>
2.1.3 執(zhí)行掃描任務(wù)
2.1.3.1 沒有單元測(cè)試覆蓋率
配置完成setting.xml后就可以到項(xiàng)目中執(zhí)行maven的執(zhí)行命令了,可以執(zhí)行以下命令
mvn sonar:sonar -Dsonar.projectKey=hitch -Dsonar.login=7c73f9b0176966c98ae9f52f129a3123227af29e
然后在項(xiàng)目中執(zhí)行相關(guān)命令
執(zhí)行后就可以等待sonar掃描即可
掃描完成后就可以看到分析的項(xiàng)目問題了
2.1.3.1 單元測(cè)試覆蓋率
配置完成項(xiàng)目后,就需要執(zhí)行sonar掃描命令了,如果需要單元測(cè)試執(zhí)行如下命令
mvn clean org.jacoco:jacoco-maven-plugin:prepare-agent install -Dmaven.test.failure.ignore=true -Dsonar.core.codeCoveragePlugin=jacoco -Dsonar.projectKey=robocode -Dsonar.login=7e469127ed58539844f1c68dd0cb77f60e02d0e6 sonar:sonar
在項(xiàng)目中執(zhí)行maven命令
執(zhí)行后就可以等待sonar掃描完成即可
掃描完成后就可以看到分析的項(xiàng)目問題了
2.2 使用SonarLint
? SonarLint是一款強(qiáng)大快速的能幫助開發(fā)者發(fā)現(xiàn)代碼里的bug或是代碼質(zhì)量?jī)?yōu)化點(diǎn)的擴(kuò)展工具。支持很多主流的語言:JAVA、js、PHP、Python,也支持主流的IDE們,idea、Eclipse、vs。在idea里更是以插件的形式無縫接入。
2.2.1 掃描模式區(qū)別
2.2.1.1 獨(dú)立模式
使用插件內(nèi)置規(guī)則進(jìn)行檢查,由于剛安裝完插件之后設(shè)置是默認(rèn)打開自動(dòng)檢測(cè)的,所以現(xiàn)在你的最底層工具欄里應(yīng)該會(huì)多一項(xiàng)sonarlint,你打開不同的Java文件,檢測(cè)會(huì)自動(dòng)進(jìn)行 ,檢測(cè)結(jié)果也會(huì)直接展示在那里。
- 優(yōu)點(diǎn):無須配置,開箱即用,檢查速度快;
- 缺點(diǎn):內(nèi)置規(guī)則與SonarQube服務(wù)器規(guī)則的不一致,會(huì)造成檢查結(jié)果的不一致。
使用
2.2.1.2 連接模式
需連接SonarQube服務(wù)器
- 優(yōu)點(diǎn):簡(jiǎn)單配置后,即可使用SonarQube服務(wù)器的規(guī)則和配置項(xiàng)進(jìn)行檢查,檢查結(jié)果保持最大一致。
- 缺點(diǎn):項(xiàng)目需先接入SonarQube。
2.2.2 安裝插件
打開IDEA,F(xiàn)ile-> Setteings->Plugins,在搜索欄搜索SonarLint,然后安裝,安裝完后點(diǎn)擊Restart IntelliJ IDEA重啟idea
2.2.3 配置SonarLint
對(duì)于企業(yè)級(jí)的開發(fā),很多企業(yè)可能對(duì)代碼風(fēng)格和檢查項(xiàng)有自己的要求。這就可以為公司的開發(fā)者提供sonarqube服務(wù)器,在其上進(jìn)行配置,然后開發(fā)者連接以后就可以讓sonarlint按照公司的定義來進(jìn)行檢查了。
2.2.3.1 添加sonarqube server
依次點(diǎn)擊File–>Settings–>Other Settings–>SonarLint General Settings,并進(jìn)行如下操作:
配置本地nodejs.exe,然后添加
sonarqube
服務(wù)器
2.2.3.2 配置項(xiàng)目
輸入剛剛創(chuàng)建的Token
最后選擇對(duì)應(yīng)的projectKey即可
可以配置響應(yīng)的模塊來查看進(jìn)行檢測(cè)項(xiàng)目
2.2.4 聯(lián)動(dòng)測(cè)試
使用了連接模式后,我們對(duì)于
sonarqube
服務(wù)求上面的規(guī)則變更會(huì)反映到我們的本地sonarlint插件上
2.2.4.1 分析代碼
該類存在四個(gè)空指針的問題,我們假設(shè)改代碼不會(huì)出現(xiàn)空指針問題
2.2.4.2 關(guān)閉服務(wù)器bug
我們到
sonarqube
將該問題給改為不會(huì)修復(fù)
,并點(diǎn)擊評(píng)論即可
2.2.4.3 查看本地掃描結(jié)果
再次來查看下本地的掃描結(jié)果,發(fā)現(xiàn)該bug提示已經(jīng)消失。
2.3 指標(biāo)分析
2.3.1 總覽
2.3.2 質(zhì)量閾值
表示掃描是否通過,如果沒有通過會(huì)顯示失敗,就需要進(jìn)行修改代碼了
2.3.3 可靠性
可靠性主要反應(yīng)代碼的bug數(shù)量,分為A-E五個(gè)等級(jí),計(jì)算規(guī)則如下
- A :0 Bug 最高等級(jí)A,表示代碼無bug
- B :at least 1 Minor Bug 代碼只要有一個(gè)次要bug,等級(jí)就為B
- C:at least 1 Major Bug 只要包含一個(gè)重要bug,等級(jí)將為C
- D:at least 1 Critical Bug 只要有一個(gè)嚴(yán)重bug,等級(jí)評(píng)估為D
- E:at least 1 Blocker Bug 只要有一個(gè)最高等級(jí)的阻斷級(jí)別的bug,可靠性評(píng)估為E,最低級(jí)別
2.3.4 漏洞嚴(yán)重級(jí)別
2.3.4.1 阻斷
直接獲取重要服務(wù)器(客戶端)權(quán)限的漏洞。
? 包括但不限于遠(yuǎn)程任意命令執(zhí)行、上傳 webshell、可利用遠(yuǎn)程緩沖區(qū)溢出、可利用的 ActiveX 堆棧溢出、可利用瀏覽器 use after free 漏洞、可利用遠(yuǎn)程內(nèi)核代碼執(zhí)行漏洞以及其它因邏輯問題導(dǎo)致的可利用的遠(yuǎn)程代碼執(zhí)行漏洞; 直接導(dǎo)致嚴(yán)重的信息泄漏漏洞,包括但不限于重要系統(tǒng)中能獲取大量信息的SQL注入漏洞; 能直接獲取目標(biāo)單位核心機(jī)密的漏洞。
2.3.4.2 嚴(yán)重
直接獲取普通系統(tǒng)權(quán)限的漏洞
? 包括但不限于遠(yuǎn)程命令執(zhí)行、代碼執(zhí)行、上傳webshell、緩沖區(qū)溢出等; 嚴(yán)重的邏輯設(shè)計(jì)缺陷和流程缺陷。包括但不限于任意賬號(hào)密碼修改、重要業(yè)務(wù)配置修改、泄露; 可直接批量盜取用戶身份權(quán)限的漏洞。包括但不限于普通系統(tǒng)的SQL注入、用戶訂單遍歷; 嚴(yán)重的權(quán)限繞過類漏洞。包括但不限于繞過認(rèn)證直接訪問管理后臺(tái)、cookie欺騙。 運(yùn)維相關(guān)的未授權(quán)訪問漏洞,包括但不限于后臺(tái)管理員弱口令、服務(wù)未授權(quán)訪問
2.3.4.3 重要
需要在一定條件限制下,能獲取服務(wù)器權(quán)限、網(wǎng)站權(quán)限與核心數(shù)據(jù)庫數(shù)據(jù)的操作
? 包括但不限于交互性代碼執(zhí)行、一定條件下的注入、特定系統(tǒng)版本下的getshell等; 任意文件操作漏洞。包括但不限于任意文件寫、刪除、下載,敏感文件讀取等操作; 水平權(quán)限繞過,包括但不限于繞過限制修改用戶資料、執(zhí)行用戶操作。
2.3.4.4 次要
能夠獲取一些數(shù)據(jù),但不屬于核心數(shù)據(jù)的操作
? 在條件嚴(yán)苛的環(huán)境下能夠獲取核心數(shù)據(jù)或者控制核心業(yè)務(wù)的操作, 需要用戶交互才可以觸發(fā)的漏洞,包括但不限于XSS漏洞、CSRF漏洞、點(diǎn)擊劫持。
2.3.5 安全性
安全性主要反應(yīng)代碼中可能存在的漏洞的數(shù)量
2.3.5.1 熱點(diǎn)和漏洞
熱點(diǎn)和漏洞之間的主要區(qū)別:在決定是否應(yīng)用修復(fù)之前需要進(jìn)行審查
2.3.5.2 安全熱點(diǎn)
可以突出顯示安全敏感的一段代碼,但可能不會(huì)影響整體應(yīng)用程序安全性。由開發(fā)人員審查代碼以確定是否需要修復(fù)以保護(hù)代碼。文章來源:http://www.zghlxwxcb.cn/news/detail-491062.html
2.3.5.3 漏洞
已發(fā)現(xiàn)需要立即修復(fù)的影響應(yīng)用程序安全性的問題文章來源地址http://www.zghlxwxcb.cn/news/detail-491062.html
到了這里,關(guān)于Java代碼質(zhì)量分析Sonar的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!