代码审计实战

Sonar实战

sonarqube部署

临时性部署

docker run -d --name sonarqube \
-p 9000:9000 -p 9092:9092 \
sonarqube

8.x以上的版本部署

docker run -d \
    --name sonarqube_postgres \
    -e POSTGRES_USER=sonarqube \
    -e POSTGRES_PASSWORD=sonarqube \
    -e PGDATA=/var/lib/postgresql/data/pgdata \
    -v $PWD/postgresql:/var/lib/postgresql/data \
    postgres

mkdir sonarqube_data sonarqube_extensions sonarqube_logs
chown -R 999:999 sonarqube_data sonarqube_extensions sonarqube_logs
docker run -d  --name sonarqube_hogwarts -p 9000:9000 -p 9092:9092 --link sonarqube_postgres:db \
     -e SONARQUBE_JDBC_USERNAME=sonarqube -e SONARQUBE_JDBC_PASSWORD=sonarqube \
    -e SONARQUBE_JDBC_URL="jdbc:postgresql://db/sonarqube" \
    -v $PWD/sonarqube_data:/opt/sonarqube/data \
    -v $PWD/sonarqube_extensions:/opt/sonarqube/extensions \
    -v $PWD/sonarqube_logs:/opt/sonarqube/logs \
sonarqube

学院演练公共服务器

手动安装插件:https://www.sonarplugins.com/
生成token

SONARQUBE_TOKEN=c7a93fb6bb1e3268f7099b0f26672ba43c117bb9

演练项目

git clone https://github.com/SonarSource/sonar-scanning-examples.git
cd sonar-scanning-examples

scanner

export SONAR_HOME=/usr/local/Cellar/sonar-scanner/4.2.0.1873
export PATH=$SONAR_HOME/bin/:$PATH
cd sonarqube-scanner
sonar-scanner \
  -Dsonar.host.url=http://sonarqube.testing-studio.com:9000 \
  -Dsonar.login=$SONARQUBE_TOKEN

通用测试数据分析

sonar-scanner \
-Dsonar.projectKey=generic_demo \
-Dsonar.coverageReportPaths=coverage.xml  \
-Dsonar.testExecutionReportPaths=xunit.xml \
-Dsonar.host.url=http://sonarqube.testing-studio.com:9000 \
-Dsonar.login=$SONARQUBE_TOKEN

Web Api与勋章获取






  • bugs
  • code_smells
  • coverage
  • duplicated_lines_density
  • ncloc
  • sqale_rating
  • alert_status
  • reliability_rating
  • security_rating
  • sqale_index
  • vulnerabilities

作业1

在自己本地搭建sonarqube服务器,然后分析一个maven项目,把截图贴到回复里

思寒老师好,我想问一个问题,sonar是全量扫描的,当项目变得越来越大时,全量扫描就变得很慢,虽然sonar里有增量显示bugs数等的变动,但是还是全量扫描的,有没有增量扫描的方案呢,而不是每次都扫描全量代码?

项目大的时候要分模块,这样就可以加速了。
对于单个模块来说,没有办法只扫描增量的代码,因为他需要分析完整的语法树。
至于不变动的文件,他有没有优化或者cache结果,只能靠sonarqube的策略了。

如何汉化,英文的看起来太不友好了 :innocent:

我记得是有汉化包的,方便给项目内的人员看,你可以搜搜,但是应该有对应版本

image

这个插件不起作用,我试过

重启呢?我以前搭建的是6.8版本的

重启也不行,我重启N次了 我的是7.2的版本

思寒老师,我想问下安全扫描这一块的,都是基于什么样的检测机制去扫描的啊。
比如使用某个插件,扫描完了没有问题就真的安全了吗?这种可以不可以自定义规则啊?如果可以的话,大概可以从哪些大的方面去制定呢?

rules本身可以删减规则,也可以自定义自己的规则 https://docs.sonarqube.org/latest/extend/adding-coding-rules/

老师,这个覆盖率只是针对单元测试吗,如果是接口测试的覆盖率怎么获取结果

单元测试的覆盖率统计比较方便,就是现在的方式。

如果是集成测试,比如接口测试、压力测试等,借助于jacoco,从远程服务器提取覆盖率文件exec,copy到项目里即可。

可以从jacoco中自己分析各种diff相关的覆盖率,转成通用覆盖率或者jacoco自己的xml数据,上传即可

  • 自动部署
  • 接口测试
  • 提取exec文件回传
  • 覆盖率的进一步处理
  • sonar执行

作业:


作业(扫描maven项目)

1、在docker中安装sonarqube遇到问题:

ERROR: [1] bootstrap checks failed
[1]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]

解决方案:
docker-machine ssh
sudo sysctl -w vm.max_map_count=262144执行此命令后显示如下:
vm.max_map_count = 262144
重新启动sonarqube,启动成功

1 个赞


目前还没特别真实和数据完备的作业完成,大家加油。找一个自己公司的项目真正的用一下。

作业: