代码审计平台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级别的,

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/3032216.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

激光雷达赋能盲人导航:精准安全与实施挑战并存

在当今科技的推动下&#xff0c;一款名为“蝙蝠避障”专门为盲人设计的辅助应用正逐渐成为他们独立出行的重要工具&#xff0c;特别是那些融入了激光雷达技术的应用&#xff0c;为盲人导航提供了前所未有的支持。然而&#xff0c;任何技术都有其两面性&#xff0c;接下来我们将…

Fcos源码训练编译问题

训练fcos代码时出现问题 ImportError: cannot import name ‘_C’ 原因是没有对代码进行编译 运行python setup.py develop --no-deps进行代码编译 编译过程中出现报错&#xff1a; fcos_core/csrc/cuda/ROIAlign_cuda.cu:5:10: fatal error: THC/THC.h: No such file or dire…

【Hugging Face】编写 shell 脚本在 huggingface 镜像站快速下载模型文件

前言 我们使用 Git LFS 和 wget 结合的方法&#xff0c;小文件使用 Git 下载&#xff0c;大文件使用 wget 下载 Git 下载的优缺点&#xff1a; 优点&#xff1a;相当简单 缺点&#xff1a;不支持断点续传 直接 wegt 下载比较稳定&#xff0c;但是欠缺优雅 我们可以将这两…

python + word文本框中文字识别并替换【真替换,不只是识别】

1. 简单描述 在一些转换场景下&#xff0c;文本框不会被转换&#xff0c;需要先识别成文字内容。 【识别的文字段落可能会和实际看到的效果有些差异&#xff0c;后续还需校对&#xff0c;如下图】。 不足&#xff1a;除了上面说的那个情况&#xff08;上图说的问题&#xff0…

pytest + yaml 框架 - 录制接口转 yaml 用例实现

pytest yaml 框架基本不用写 python 代码&#xff0c;只需写yaml 文件用例就能实现接口自动化。 现在引入接口录制功能&#xff0c;连 yaml 文件也不用写了&#xff0c;点点点就能生成 yaml 用例文件了。 录制功能在v1.3.4版本上实现 pip instal pytest-yaml-yoyo 环境准备 …

LLM 可以从简单数据中学习吗?

在 10 月份的一次周会结束后&#xff0c;我提到 SFT 训练后的 Loss 曲线呈现阶梯状&#xff0c;至于为什么&#xff0c;并没有人有合理的解释&#xff0c;加上当时的重心是提升次日留存率&#xff0c;Loss 曲线呈现阶梯状与次日留存率的关系还太远&#xff0c;即使有问题&#…

微信小程序按钮去除边框线

通常我们去掉按钮边框直接设置 border:0 但是在小程序中无效&#xff0c;设置outline:none也没用&#xff0c;当然可能你会说加权重无效 实际上该样式是在伪元素::after内&#xff0c;主要你检查css 还看不到有这个关系&#xff0c;鹅厂就是坑多 类样式::after {border: non…

halcon获取Licenses--每月一换

转到https://www.51halcon.com/ 点击授权&#xff0c;根据你的版本选择progress或者steady进行下载 记住每月一换哦

Ubuntu磁盘剩余空间不足,空间异常

近日发现用了3年的Ubuntu系统笔记本磁盘空间极度告急&#xff0c;上网搜了一下都是讲解如何扩容、如何重新挂载空间&#xff0c;但是博主发现/home目录明明分配了200G的空间&#xff0c;但是只剩下6G可用&#xff0c;查询所有的文件夹发现&#xff0c;所有文件加起来已使用50G左…

使用Baidu Comate五分钟 , 工作时间摸鱼8小时

Baidu Comate&#xff1a;引领智能编码新时代 文章目录 Baidu Comate&#xff1a;引领智能编码新时代一、明日工具&#xff0c;今日领先——百度Comate智能编码助手二、万变不离其宗——适配场景需求三、功能研究3.1 指挥如指掌——指令功能3.2 助手增援——插件功能使用3.3 实…

本地运行.net项目

有时候需要我们自己做一个.net的课设项目&#xff0c;但是我们有了代码后却不知道怎么运行。我们0基础来学习一下如何运行一个.net项目 1.安装visual studio 2022 不用安装老版本&#xff0c;新版就可以。安装好了2022版本&#xff0c;这是一个支持web的IDE&#xff0c;我们可…

【数据结构初阶】直接插入排序

最近浅学了直接插入排序&#xff0c;写个博客做笔记&#xff01;笔记功能除外若能对读者老爷有所帮助最好不过了&#xff01; 直接插入排序是插入排序的一种&#xff0c;那么介绍直接插入排序之前先介绍一下常见的排序算法&#xff01; 目录 1.常见的排序算法 2.直接插入排…

【LeetCode:2391. 收集垃圾的最少总时间 + 二分】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

值得收藏!!《软考信息处理技术员》必背100母题,轻松45+

距离软考考试的时间越来越近了&#xff0c;趁着这两周赶紧准备起来 今天给大家整理了——软考信息处理技术员100道经典母题&#xff0c;年年从里面抽&#xff0c;有PDF&#xff0c;可打印&#xff0c;每天刷几道。 第一章 电脑的基本操作 1、&#xff08; &#xff09;不是国产…

特产销售|基于Springboot+vue的藏区特产销售平台(源码+数据库+文档)​

目录 基于Springbootvue的藏区特产销售平台 一、前言 二、系统设计 三、系统功能设计 1系统功能模块 2管理员功能模块 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 博主介绍&#xff1a;✌️大厂码农|毕设布道…

macOS上将ffmpeg.c编译成Framework

1 前言 本文介绍下在macOS上将ffmpeg的fftools目录下的ffmpeg.c程序&#xff0c;也就是ffmpeg的命令行程序&#xff0c;编译成framework的方法。编译成.a或.dylib亦是类似。 编译环境如下&#xff1a; xcode15.3&#xff1b;ffmpeg branch release/6.1; 2 编译ffmpeg 首先clon…

智能AI个人名片小程序源码系统 带完整的安装代码包以及搭建部署教程

在当今数字化时代&#xff0c;个人名片不再仅仅是一张简单的纸质卡片&#xff0c;而是演变成了一种更加智能、便捷的数字化工具。为了满足这一需求&#xff0c;小编给大家分享一款智能AI个人名片小程序源码系统&#xff0c;该系统不仅提供了完整的安装代码包&#xff0c;还附带…

宋仕强论道之新质生产力

宋仕强论道之新质生产力&#xff0c;宋仕强说当前5G通信、人工智能、万物互联、工业互联网、数字经济、新能源技术和产业等领域正蓬勃发展&#xff0c;成为未来经济增长的重要推动力&#xff0c;也是目前提倡的新质生产力的重要组成部分。而这些领域的发展都离不开数据的采集、…

shopee虾皮跨境商家:月出1000单爆款打造思路!

Shopee爆款打造的方式是需要满足很多特点的&#xff0c;我把它大概归结为了7大要素&#xff1a; 1、顺应平台潮流 通过Shopee前台、市场周报&#xff0c;以及你对这个行业的经验&#xff0c;能够及时掌握平台最近主推产品的信息&#xff0c;又刚好我们店铺里面的商品有能够搭…

SpringBoot内置插件的使用(jackson和lombok)

文章目录 引言I lombok(自动为属性生成构造器)II jacksonsee also引言 idea2021.2.2 已经捆绑安装jackson和lombok插件 I lombok(自动为属性生成构造器) Lombok能通过注解的方式,在编译时自动为属性生成构造器、getter/setter、equals、hashcode、toString方法。 https://p…