当前位置: 首页 > news >正文

代码审计平台sonarqube的安装及使用

docker搭建代码审计平台sonarqube

      • 一、代码审计关注的质量指标
      • 二、静态分析技术分类
      • 三、使用sonarqube的目的
      • 四、sonarqube流程
      • 五、docker快速搭建sonarqube
      • 六、sonarqube scanner的安装和使用
      • 七、sonarqube对maven项目进行分析
      • 八、sonarqube分析报告解析
      • 九、代码扫描规则定制
      • 十、sonarqube api的使用
      • 十一、单元测试与代码覆盖率实战
      • 十二、使用注意事项

一、代码审计关注的质量指标

  • 代码坏味道
    • 代码规范
    • 技术债评估
  • bug和漏洞
  • 代码重复度
  • 单测与集成
    • 测试用例数量
    • 覆盖率

二、静态分析技术分类

  • 代码静态检查
    • 代码分析:lint系列,通过分析语法树和源代码,检查代码规范
    • 编译器分析:借助于编译器获得代码关系
  • 字节码静态分析
    • 分析jar、war、dex等格式的文件,代表工具:fndbugs

三、使用sonarqube的目的

sonarqube目前我们着重关注一些高优先级别的bug,特别是新增代码导致的新的bug和漏洞,比如因为安全规范没遵守导致潜在漏洞发生。还有就是看覆盖率和单元测试的case数量,以及引用覆盖率去度量产品测试是否充分。

四、sonarqube流程

在这里插入图片描述

五、docker快速搭建sonarqube

db_instance=postgres_prod
sonarqube_instance=sonarqube_prod
data_dir=/root/sonarqube
#创建数据目录
mkdir -p $data_dir
mkdir $data_dir/postgresql
mkdir $data_dir/sonarqube_data
mkdir $data_dir/sonarqube_extensions
mkdir $data_dir/sonarqube_logs
chmod -R 777 $data_dir#创建网络
docker network create sonarqube
#启动pg数据库
docker run -d \--name $db_instance \--network sonarqube \-p 5432:5432 \-e POSTGRES_USER=sonarqube \-e POSTGRES_PASSWORD=sonarqube \-e PGDATA=/var/lib/postgresql/data/pgdata \-v $data_dir/postgresql:/var/lib/postgresql/data \postgressysctl -w vm.max_map_count=524288
sysctl -w fs.file-max=131072
ulimit -n 131072
ulimit -u 8192#启动soarqube的产品部署
docker run -d \--name $sonarqube_instance \--network sonarqube \-p 9000:9000 -p 9092:9092 \-e SONARQUBE_JDBC_USERNAME=sonarqube \-e SONARQUBE_JDBC_PASSWORD=sonarqube \-e SONARQUBE_JDBC_URL="jdbc:postgresql://$db_instance/sonarqube" \-v $data_dir/sonarqube_data:/opt/sonarqube/data \-v $data_dir/sonarqube_extensions:/opt/sonarqube/extensions \-v $data_dir/sonarqube_logs:/opt/sonarqube/logs \sonarqubedocker start sonarqube_prod
  • 查看日志:docker logs -f sonarqube_prod

  • 搭建完成后网页输入http://ip:9000/访问,默认用户名密码是admin,进入以后可以改密码,首页长这样
    在这里插入图片描述

  • 页面介绍:

    • project:项目tab,可以在里面创建一个项目。有项目的可以看到项目总览
      在这里插入图片描述

    • issues:报告出来的问题。左边可以根据条件进行筛选
      在这里插入图片描述

    • rules:系统总共有多少规则需要配置
      在这里插入图片描述

    • quality profiles:包含了一系列rules的配置文件,用于代码分析。允许对规则进行自定义,自己去创建一个新的规则集,然后到rules去里面选自己觉得有用的
      在这里插入图片描述

    • quality gates:质量门禁,可以在里面配置比如覆盖率达到x%的时候就表示通过
      在这里插入图片描述

    • administration:管理员面板
      在这里插入图片描述

  • 安装插件

    • java常用插件有Checkstyle,Findbugs,PMD,SonarJS,SonarJava(后面这3个我找不到了,不知道是不是我版本太高了哈哈)
      在这里插入图片描述
  • 我们可以在/root/sonarqube/sonarqube_extensions/downloads查看到下载内容
    在这里插入图片描述

  • 下载完记得要重启
    在这里插入图片描述

六、sonarqube scanner的安装和使用

PS:我这边下的是sonar的v10.5.1 版本,要搭配java17使用,大家要提前配好环境变量哦~

  • 安装scanner并配置环境变量。
# 下载
wget https://binaries.sonarsource.com/Distribution/sonar-scanner-cli
/sonar-scanner-cli-5.0.1.3006-linux.zip
# 解压
yum -y install unzip
unzip sonar-scanner-5.0.1.3006-linux
# 修改conf配置的全局变量,改成自己的sonarqube地址,还有login密码并保存
cd sonar-scanner-5.0.1.3006-linux/
vim conf/sonar-scanner.properties 

在这里插入图片描述
在这里插入图片描述

# 配置环境变量
vim /etc/profile
# 添加上
SONARSCANNER_HOME=/root/sonarqube/sonarqube_extensions/downloads/sonar-scanner-5.0.1.3006-linux PATH=$PATH:$SONARSCANNER_HOME/bin
export SONARSCANNER_HOME PATH
# 使其生效
source /etc/profile
# 检查sonarscanner是否配置成功:
sonar-scanner -h

在这里插入图片描述

  • 使用sonar-scanner分析基础项目
# 下载sonar官方案例
git clone git@gitee.com:TheOctopus/sonar-scanning-examples.git
# 切换路径
cd sonar-scanning-examples
# 修改properties配置文件的前三个参数,projectVersion可以改成与项目一致的版本号并保存
cd /root/sonar-scanning-examples/sonarqube-scanner
vim sonar-project.properties

在这里插入图片描述

  • 输入sonar-scanner命令进行分析(这里也要注意下,记得是在sonar-project.properties所在文件夹执行命令,否则又要报错啦哈哈哈)
    在这里插入图片描述

七、sonarqube对maven项目进行分析

PS:maven的环境变量大家记得先配

  • 首先,我们需要在页面新建一个项目:projects-create project-输入name,key-点击next
    在这里插入图片描述
  • create project
    在这里插入图片描述
  • 分析方式选择,我这边选择locally
    在这里插入图片描述
  • 点击generate生成秘钥-点击continue
    在这里插入图片描述
  • 选择maven,然后复制里面的语句,进入项目里,在pom文件所在文件夹执行命令(图片里的key和name对不上是因为上面的项目忘记截图了,重新创建了一个。。)
    在这里插入图片描述
    在这里插入图片描述
    结果可以在这里看,也可以直接在sonarqube的页面看,都有的
    在这里插入图片描述
    在这里插入图片描述
    还有另外一种方式,就是通过配置maven的setting.xml文件,然后运行的时候只需要执行mvn clean verify sonar:sonar即可,替你们试过了太麻烦了而且不灵活,不推荐!
<!--demo-->
<settings><pluginGroups><pluginGroup>org.sonarsource.scanner.maven</pluginGroup></pluginGroups><profiles><profile><id>sonar</id><activation><activeByDefault>true</activeByDefault></activation><properties><!-- Optional URL to server. Default value is http://localhost:9000 --><sonar.host.url>http://myserver:9000</sonar.host.url></properties></profile></profiles>
</settings>

在这里插入图片描述

在这里插入图片描述

八、sonarqube分析报告解析

在这里插入图片描述

  • overview
    Quality Gate Status:整体是否通过
    Security:安全性。底下的H、M、L分别代表高中低
    Reliability:可靠性
    Maintainability:可维护性
    Accepted issues:那些已经被分析人员或团队成员接受并认为不需要进一步处理的问题
    Coverage:覆盖率
    Duplications:重复
    Security Hotspots:代码中存在安全问题的部分,它可以帮助安全分析师确定代码是否存在漏洞

  • Issues栏:bug记录
    在这里插入图片描述
    点进去可以看到bug详情和解决方案
    在这里插入图片描述
    我们可以重点关注这里
    在这里插入图片描述

  • measures栏
    可以理解成质量模型
    在这里插入图片描述
    可以点进去查看详情
    在这里插入图片描述

  • new code 新增代码的覆盖率

    • sonar可以很智能的分析新增代码的变更。怎么定义新增呢?比如和上次的代码发生了偏差,都认为是新增的
      在这里插入图片描述

九、代码扫描规则定制

sonarqube默认自带了很多扫描的规则,但是有的规则在实际项目里用不到,我们如何自定义规则呢?

  • 进入rules里,这里可以看到自带的规则,然后我们可以进行过滤,比如把优先级是低级中级的先过滤,这样报告才能突出重点,更加简洁明确。比如代码重复度,这个一旦爆出就表示代码一定哪些地方写重复了,还有一些高优先级的bug和漏洞。对于code smell,低级别的bug之类的可以尽量弱化。
  • 比如我们只要高优先级的,可以筛出来,然后保存成配置文件然后导入即可
    在这里插入图片描述
  • 建议把报告直接给研发去看,我们QA完全不管。还有就是我们有专门团队去看扫描的问题,然后帮助研发去解决。研发有时候也看不懂,他们会构造对应场景,告诉研发危害是什么。对于偏业务测试的团队,还是建议不要去提这类的bug,会耗费大量精力,这个比较适合专门的团队去跟进这些问题。
  • 一些规则的定制建议由专门的团队去负责

十、sonarqube api的使用

  • 要让gitlab、jenkins去访问sonarqube,包括我们写测试平台的时候,我们有时候需要从sonarqube提取数据,需要对外提供api。

  • 访问api文档:右下角点击web api在这里插入图片描述
    就可以看到具体的了,这些指标也是对应我们上面的一些功能
    在这里插入图片描述

  • web hook功能使用

    • 当sonar分析完一个项目的时候,jenkins希望得到通知,我们就可以使用web hook功能
    • 如何配置?
      进入administration-configuration-webhooks-create,输入如下参数进行配置
      在这里插入图片描述

    在这里插入图片描述

    十一、单元测试与代码覆盖率实战

    • 相关文档:https://docs.sonarsource.com/sonarqube/latest/analyzing-source-code/test-coverage/test-coverage-parameters/

    • 无侵入快速覆盖率统计

      • 1、进入项目,执行该脚本
// 启动注入并对代码进行染色,执行单元测试,生成覆盖率报告mvn clean \org.jacoco:jacoco-maven-plugin:0.8.6:prepare-agent \test \org.jacoco:jacoco-maven-plugin:0.8.6:report\-Dmaven.test.failure.ignore=true \-Dmaven.test.skip=false
  • 得到结果

在这里插入图片描述

  • 跑完以后会生成exec结尾的报告
    在这里插入图片描述

  • 把它转为xml文件:

    • 执行mvn org.jacoco:jacoco-maven-plugin:0.8.6:report
      在这里插入图片描述
    • 查看生成的xml文件
      在这里插入图片描述
    • 利用scanner上传覆盖率数据
find $PWD -name "jacoco.*"mvn \clean \org.jacoco:jacoco-maven-plugin:0.8.6:prepare-agent \test \org.jacoco:jacoco-maven-plugin:0.8.6:report  \sonar:sonar  \-Dsonar.projectKey=demo   \-Dsonar.host.url=http://192.168.10.137:9000/   \-Dsonar.token=sqp_2097cdfb11f2c55b87362c34acc660c781e03709  \-Dsonar.coverage.jacoco.xmlReportPaths="$PWD/**/**/**/**/jacoco.xml" \-Dmaven.test.failure.ignore=true   \-Dmaven.test.skip=false

执行完毕
在这里插入图片描述
查看页面,覆盖率有值啦
在这里插入图片描述
在这里插入图片描述
代码修改后,我们重新运行上面的脚本,可以看到new code页有数据了。
在这里插入图片描述

十二、使用注意事项

大家不要把所有扫描出来的bug都扔给研发,因为一个系统扫描一下通常有上千个bug,有些bug的级别是非常低的,建议不要关注历史的代码债,只关注新增的(上面那个页面的),重点关注代码覆盖率,还有severity也重点关注high级别的,

相关文章:

代码审计平台sonarqube的安装及使用

docker搭建代码审计平台sonarqube 一、代码审计关注的质量指标二、静态分析技术分类三、使用sonarqube的目的四、sonarqube流程五、docker快速搭建sonarqube六、sonarqube scanner的安装和使用七、sonarqube对maven项目进行分析八、sonarqube分析报告解析九、代码扫描规则定制十…...

C++ 使用nlohmann/json.hpp库读写json字符串

1. json库 我个人比较喜欢 nlohmann/json.hpp 这个库&#xff0c;因为它只需要一个hpp文件即可&#xff0c;足够轻量&#xff01; 这是它的github地址。 2. 简单实例代码 #include <iostream> #include <json.hpp> #include <fstream> #include <stri…...

3GPP官网下载协议步骤

1.打开官网 https://www.3gpp.org/ 2.点击 3.在界面选择要找的series&#xff0c;跳转到查找界面 以V2X通信协议为例&#xff0c;论文中通常会看到许多应用&#xff1a; [7] “Study on evaluation methodology of new Vehicle-to-Everything (V2X) use cases for LTE and NR…...

【JAVA】Git 的基本概念和使用方式

Git是一个开源的分布式版本控制系统&#xff0c;由Linus Torvalds创建&#xff0c;用于有效、高速地处理从小到大的项目版本管理。以下是Git的一些基本概念和使用方式的深入探讨&#xff1a; 基本概念 1. 仓库&#xff08;Repository&#xff09; 仓库是Git用来保存你的项目…...

C++多态实现原理详解

阅读引言&#xff1a; 我想象了一下&#xff0c; 假如人有突然问我什么是多态&#xff0c; 我该如何给别人说清楚呢&#xff1f;所以写下这篇文章&#xff0c; 希望大家看完有所收获。 ①. 开胃小菜 先看这样一个开胃小菜 这里我有点小小的疑惑&#xff0c; 大小为啥是1。 在C…...

[数据集][目标检测]交通灯检测数据集VOC+YOLO格式2600张1类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;2600 标注数量(xml文件个数)&#xff1a;2600 标注数量(txt文件个数)&#xff1a;2600 标注…...

关于测试用例

目录 一 测试用例介绍 二 写用例的好处 三 不适合写用例的情况 一 测试用例介绍 测试用例由测试来写&#xff0c;编写时间在需求评审和设计评审&#xff08;如有&#xff09;结束后&#xff0c;需求提测前&#xff0c;用例依赖需求文档来编写。一般包含用例标题&#xff0c…...

一起长锈:3 类型安全的Rust宏(从Java与C++转Rust之旅)

讲动人的故事,写懂人的代码 故事梗概:在她所维护的老旧Java系统即将被淘汰的危机边缘,这位在编程中总想快速完事的女程序员,希望能转岗到公司内部使用Rust语言的新项目组,因此开始自学Rust;然而,在掌握了Rust编程知识之后,为了通过Rust项目组的技术面试,使得转岗成功而…...

《金融研究》:普惠金融改革试验区DID工具变量数据(2012-2023年)

数据简介&#xff1a;本数据集包括普惠金融改革试验区和普惠金融服务乡村振兴改革试验区两类。 其中&#xff0c;河南兰考、浙江宁波、福建龙岩和宁德、江西赣州和吉安、陕西铜川五省七地为普惠金融改革试验区。山东临沂、浙江丽水、四川成都三地设立的是普惠金融服务乡村振兴…...

Prompt|Kimi高阶技巧,99%的人都不知道

大家好&#xff0c;我是无界生长。 今天分享一条咒语&#xff0c;轻松让Kimi帮你生成流程图&#xff0c;学会了的话&#xff0c;点赞收藏起来吧&#xff01; 效果展示 我们演示一下让kimi帮忙绘制 关注微信公众号“无界生长”的流程图&#xff0c;最终效果图如下所示 效果还不…...

采购管理软件:采购自动化提高效率的5种方式

在采购领域&#xff0c;手动数据输入和耗时的文书工作的时代已经落后了。采购自动化正在改变游戏规则&#xff0c;使企业能够简化流程、降低成本并提高效率。 以下是采购自动化帮助企业提高效率的5种方法。 采购管理软件,采购自动化管理,8Manage SRM,高亚科技 减少手动流程和…...

Android App开机启动

清单文件 <?xml version"1.0" encoding"utf-8"?> <manifest xmlns:android"http://schemas.android.com/apk/res/android"xmlns:tools"http://schemas.android.com/tools"><uses-permission android:name"andro…...

服务器直连电脑(盒子直连电脑)电脑需要设置为固定ip才能访问盒子

文章目录 现象盒子设置为固定ip&#xff0c;pc设置成固定ip&#xff08;以太网网卡&#xff0c;realtak那个&#xff0c;不是tap-windows那个&#xff0c;tap-windows不用管&#xff09;&#xff0c;在pc上用ip搜索工具搜索&#xff0c;可以搜到盒子ip。盒子设置为固定ip&#…...

【设计模式】之代理模式(两种)

系列文章目录 &#xff08;其他设计模式可以参考 &#x1f449;&#x1f449;&#x1f449;&#xff09;设计模式_小杰不秃头的博客 &#x1f60a;&#x1f604;&#x1f61b; 前言 今天继续给大家介绍23种设计模式中的代理模式&#xff0c;熟悉Spring的小伙伴都知道&#xf…...

【工具篇】-什么是.NET

“.NET"&#xff1a;.NET Core是由Microsoft开发&#xff0c;目前在.NET Foundation(一个非营利的开源组织)下进行管理。.NET Core是用C#和C编写的&#xff0c;并采用MIT协议作为开源协议。 简单来说&#xff1a;就是开发框架。 .NET 又称 .NET 平台或 .NET 框架&#xf…...

OmniReader Pro mac激活版:智慧阅读新选择,开启高效学习之旅

在追求知识的道路上&#xff0c;一款优秀的阅读工具是不可或缺的。OmniReader Pro作为智慧阅读的新选择&#xff0c;以其独特的功能和卓越的性能&#xff0c;为您开启高效学习之旅。 OmniReader Pro具备高效的文本识别和处理技术&#xff0c;能够快速准确地提取文档中的关键信息…...

Stable Diffusion学习记录

文章目录 前言电脑配置推荐环境搭建下载地址安装步骤步骤一&#xff0c;打开下载的秋叶整合包&#xff0c;路径秋叶整合包/sd-wenui-aki步骤二&#xff0c;打开下载好的sd-webui-aki-v4.8.7解压包 Stable Diffusion软件配置&#xff0c;插件安装&#xff0c;模型下载Stable Dif…...

安装openssh-server,提供远程ssh

安装openssh-server&#xff0c;提供远程ssh 1.检查自己是否安装了openssh-server dpkg -l | grep ssh如果输出内容有openssh-server&#xff0c;说明已经安装过了&#xff0c;可以跳过下一步 2.安装openssh-server 由于ubuntu自带ssh客户端&#xff0c;只需要安装openssh-se…...

华纳云:选择数据库服务器你需要注意的5个原则

选择数据库服务器时&#xff0c;有几个关键原则需要注意&#xff0c;以确保选择的服务器能够满足你的需求并提供可靠的性能和安全性。 1. 性能需求 考虑你的应用程序对性能的需求&#xff0c;包括处理能力、内存、存储和网络带宽等方面。根据应用程序的负载和预期的并发访问量&…...

Linux动态库与静态库解析

文章目录 一、引言二、C/C源文件的编译过程三、静态库1、静态库的定义和原理2、静态库的优缺点3、静态库的创建和使用a、创建静态库b、使用静态库 四、动态库1、动态库的定义和原理2、动态库的优缺点3、动态库的创建和使用示例a、创建动态库b、使用动态库 五、动静态库的比较 一…...

基于算法竞赛的c++编程(28)结构体的进阶应用

结构体的嵌套与复杂数据组织 在C中&#xff0c;结构体可以嵌套使用&#xff0c;形成更复杂的数据结构。例如&#xff0c;可以通过嵌套结构体描述多层级数据关系&#xff1a; struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…...

突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合

强化学习&#xff08;Reinforcement Learning, RL&#xff09;是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程&#xff0c;然后使用强化学习的Actor-Critic机制&#xff08;中文译作“知行互动”机制&#xff09;&#xff0c;逐步迭代求解…...

React Native 导航系统实战(React Navigation)

导航系统实战&#xff08;React Navigation&#xff09; React Navigation 是 React Native 应用中最常用的导航库之一&#xff0c;它提供了多种导航模式&#xff0c;如堆栈导航&#xff08;Stack Navigator&#xff09;、标签导航&#xff08;Tab Navigator&#xff09;和抽屉…...

练习(含atoi的模拟实现,自定义类型等练习)

一、结构体大小的计算及位段 &#xff08;结构体大小计算及位段 详解请看&#xff1a;自定义类型&#xff1a;结构体进阶-CSDN博客&#xff09; 1.在32位系统环境&#xff0c;编译选项为4字节对齐&#xff0c;那么sizeof(A)和sizeof(B)是多少&#xff1f; #pragma pack(4)st…...

遍历 Map 类型集合的方法汇总

1 方法一 先用方法 keySet() 获取集合中的所有键。再通过 gey(key) 方法用对应键获取值 import java.util.HashMap; import java.util.Set;public class Test {public static void main(String[] args) {HashMap hashMap new HashMap();hashMap.put("语文",99);has…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序

一、开发环境准备 ​​工具安装​​&#xff1a; 下载安装DevEco Studio 4.0&#xff08;支持HarmonyOS 5&#xff09;配置HarmonyOS SDK 5.0确保Node.js版本≥14 ​​项目初始化​​&#xff1a; ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...

令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍

文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结&#xff1a; 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析&#xff1a; 实际业务去理解体会统一注…...

数据库分批入库

今天在工作中&#xff0c;遇到一个问题&#xff0c;就是分批查询的时候&#xff0c;由于批次过大导致出现了一些问题&#xff0c;一下是问题描述和解决方案&#xff1a; 示例&#xff1a; // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...

Golang——7、包与接口详解

包与接口详解 1、Golang包详解1.1、Golang中包的定义和介绍1.2、Golang包管理工具go mod1.3、Golang中自定义包1.4、Golang中使用第三包1.5、init函数 2、接口详解2.1、接口的定义2.2、空接口2.3、类型断言2.4、结构体值接收者和指针接收者实现接口的区别2.5、一个结构体实现多…...