前言:
之前一直使用的是低版本的SonarQube,最近心血来潮换成最新的试试扫描效果,下面记录下搭建的过程,其中也有不少坑还是要注意下。
配置环境:
首先我们需要配置环境,环境我们需要安装java环境,数据库和node,首先说java环境,访问如下网址查看官方要求的环境
https://docs.sonarsource.com/sonarqube/latest/requirements/prerequisites-and-overview/
官方要求的java环境如下:
所以我们可以安装Oracle jdk或者Open jdk,下载地址如下:
https://www.oracle.com/java/technologies/javase/jdk17-archive-downloads.html
因为我使用的是windows环境搭建,所以下载的是如下版本的jdk,如果是linux环境,只要下载对应的版本安装即可:
安装完jdk,并配置好环境变量后就要按照数据库,10.1版本不支持mysql数据库,支持数据库为:PostgreSQL,Microsoft SQL Server和Oracle三种数据库,我这里选用的是第一种,下载地址如下:
https://www.enterprisedb.com/downloads/postgres-postgresql-downloads
安装的时候要注意,不要安装pgAdmin4,这个是一个连接数据库的工具,但是这里安装会卡死在进入界面,所以不要使用:
,
安装成功后可以进服务进行启动或关闭:
然后我们可以使用工具dbeaver来链接数据库,dbeaver下载地址如下:
https://dbeaver.io/
连接成功后,新建数据库sonar:
然后就是需要我们安装node不然扫描js代码会报错,下载地址如下:
https://nodejs.org/en
下载安装完成并配置环境变量,node -v能显示版本即可。
到这里环境就配置好了,下面就是安装SonarQube。
安装SonarQube:
首先去官网下载SonarQube,目前最新版为10.1,下载地址如下:
https://www.sonarsource.com/products/sonarqube/downloads/
这里我们下载第一个社区版本:
下载Community Edition到本地后,开始修改配置文件sonar.properties:
这里简单说明下配置的原因:
首先前三项是我们的数据库链接地址和账号密码,为了SonarQube链接,下面的三个是针对java的扫描,当我们的项目很大的时候会报堆错误,这里是给JVM申请足够大的空间来扫描项目防止报错,后面的web.port为我们访问web页面的端口号,search.port为我们访问本地的es8的端口,如果有冲突可以进行修改。
另外注意到10版本以后就没有wrapper.conf这个配置文件了。
sonar.jdbc.username=postgres
sonar.jdbc.password=root
sonar.jdbc.url=jdbc:postgresql://127.0.0.1:5432/sonar
sonar.web.javaOpts =-Xmx2048m -Xms2048m -XX:+HeapDumpOnOutOfMemoryError
sonar.ce.javaOpts =-Xmx9000m -Xms9000m -XX:+HeapDumpOnOutOfMemoryError
sonar.search.javaOpts =-Xmx1024m -Xms1024m -XX:+HeapDumpOnOutOfMemoryError
#sonar.web.host=192.168.3.82
sonar.web.port=9089
sonar.search.port=55690
配置完成后就可以启动SonarQube,运行安装bin\windows目录下的StartSonar.bat
如果启动成功没有退出,则在浏览器访问设置的地址,我这里设置的9089
http://127.0.0.1:9089/
初始密码为admin:admin,第一次登录后需要修改密码。
安装插件:
sonar-findbugs-plugin:
登录成功后安装插件,这里我们需要安装sonar-findbugs-plugin插件:
这里我们可以看到官方支持的插件:
这里我们去github下载sonar-findbugs:
https://github.com/spotbugs/sonar-findbugs/
下载jar包放入extensions\plugins目录下,然后重启SonarQube后可以看到安装成功:
然后我们要修改如下地方,这里要选择 :FindBugs Security Audit,只做安全扫描,不进行其他扫描。
访问后面的134可以看到我们扫描所使用的详细规则细节:
sonar-cnes-report:
安装插件sonar-cnes-report,下载地址(目前支持到9.9):
https://github.com/cnescatlab/sonar-cnes-report/releases
下载完成后放入 extensions/plugins/下,再扫描完成后可以下载详细的报告:
sonarqube-community-branch:
安装插件sonarqube-community-branch-plugin,下载地址(目前支持到9.9):
https://github.com/mc1arke/sonarqube-community-branch-plugin
下载完成后放入extensions/plugins/下,然后在sonar.properties中添加如下内容:
sonar.web.javaAdditionalOpts=-javaagent:./extensions/plugins/sonarqube-community-branch-plugin-1.14.0.jar=web
sonar.ce.javaAdditionalOpts=-javaagent:./extensions/plugins/sonarqube-community-branch-plugin-1.14.0.jar=ce
然后再扫描的时候添加-Dsonar.branch.name=feature-001即可
sonar-pdfreport-plugin:
安装插件sonar-pdfreport-plugin,下载地址(目前支持到9.9):
https://gitee.com/zzulj/sonar-pdf-plugin/releases
下载完成后放入extensions/plugins/下,在我们扫描完成后会生成pdf报告,可再web界面下载:
安装SonarScanner:
首先下载SonarScanner,这里我们下载和SonarQube10.1配套的4.8版本:
https://docs.sonarsource.com/sonarqube/latest/analyzing-source-code/scanners/sonarscanner/
下载完成后打开sonar-scanner.properties,配置SonarQube的账号密码:
项目扫描:
配置完成后我们就可以进行项目的扫描,这里以java项目为例子,扫描java项目需要我们将java项目进行编译,因为扫描的时候会进行调用检查,然后编写扫描需要的sonar-project.properties
下面先写一个模板,根据这个修改即可:
# Root project information
sonar.projectKey=TEST
sonar.projectName=TEST
sonar.projectVersion=v1.0
# Some properties that will be inherited by the modules
sonar.sources=src
## 系统编码
sonar.sourceEncoding=CP1252
sonar.java.binaries=ejbModule
## 排除扫描文件
sonar.exclusions=**/*Stub.java,**/EJS*
# List of the module identifiers
sonar.modules=test1,test2
# Properties can obviously be overriden for
## 需要在不同于启动目录的目录中进行分析时使用,存在多层目录时候
test1.sonar.projectBaseDir=test1/Workspace
## 所需要的库
test1.sonar.java.libraries=D:/IBM3/WebSphere/AppServer/lib
## 项目编译成功目录
test1.sonar.java.binaries=release_test1/tmp/classes
## 项目源代码
test1.sonar.sources=test1/src/
# Properties can obviously be overriden for
test2.sonar.projectBaseDir=test2/Workspace
test2.sonar.java.libraries=D:/IBM3/WebSphere/AppServer/lib
test2.sonar.java.binaries=release_test2/tmp/classes
test2.sonar.sources=test2/src/
设置完这些就可以编辑一个扫描bat,在当前目录下新建sonarscan.bat
cd D:\sonar\test
set SONAR_SCANNER_OPTS=-Xms2G -Xmx9G -XX:MaxPermSize=1024m -XX:+HeapDumpOnOutOfMemoryError
D:\projectSoft\sonar-scanner-4.8.0.2856\bin\sonar-scanner.bat
然后扫描即可,扫描成功后在web界面就可以看到扫描结果,进行分析。
规则修改:
从6.0版本开始就不支持sonar.language参数,意味着我们在扫描中不能指定扫描语言,如果想指定扫描语言只能自定义扫描规则:
这里我们新建test,新建成功后看到和父规则一样是28个
返回上一界面,把新建的设置为默认:
然后进入test,,这个时候选择change Parent ,然后选择None,关闭所有规则:
这个就可以看到可以将规则设置为0,即不匹配规则:
在扫描的时候就可以看到设置的规则,我这里添加的标签为LLCreate:
当然你也可以用这个方法自定义扫描的规则
总结:
总体的搭建没什么难度,主要是扫描中会有很多莫名奇妙的错误,这个只能碰到一个解决一个,如果项目过大大部分都是堆分配不够导致的错误,另外就是数据库空间不够导致的错误。另外就是扫描中会出现大量的误报,这个处理就因人而异了,毕竟没有一个工具可以完美的区别哪些是漏洞。
最后说下使用体验,最新版改了ui操作,但是个人感觉改完以后还不如以前,处理误报什么很不方便,而且不能导出报表,很蛋疼,可能还要切回旧版本,第三方支持也多,界面虽然丑点但是操作方便,新版本虽然解决了很多BUG,但是这个界面交互真的难受。