1.代码审计

1.1综合性的代码分析平台

  • sonar支持自定义规则,较多的公司使用
  • 360火线

1.2IDE辅助功能

  • Xcode、Android studio
  • 阿里巴巴Java开发手机ide插件支持

1.3独立的静态解析工具

  • findbugs Java
  • pmd 阿里巴巴Java开发手册pmd插件
  • androidlint

    通过分析语法树和源代码分析代码规范
  • scan-build objectC

1.3.1静态分析技术分类

类别 示例 原理
代码检查 lint系列 通过分析语法树和源代码分析代码规范
字节码检查 findbugs为代表 通过分析编译器给出的调用链和二进制字节码的调用链寻找逻辑缺陷

1.4代码审计平台关注的质量指标

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

2.sonar系统搭建

2.1 sonar系统搭建

sonar对外公布2个端口,指定国内的下载镜像

#该命令不是标准部署,使用嵌入式数据库,所有的数据都在内存里,使用Java特有的内存型数据库。运行的时候在内存中模拟出一个数据库,该数据库非常小巧,只适合于测试
docker run -d --name sonarqube -p 9000:9000 -p 9092:9092 \
registry.docker-cn.com/library/sonarqube

2.2 标准部署

docker应用商店用sonarqube主页

#此处依然采用的是内嵌型H2数据库,正式环境替换为mysql数据库
docker run -d --name sonarqube -p 9000:9000 -p 9092:9092 \
-e SONARQUBE_JDBC_USERNAME=sonar \
-e SONARQUBE_JDBC_PASSWORD=sonar \
-e SONARQUBE_JDBC_URL=jdbc:postgresql://localhost/sonar \
sonarqube

2.3下载sonar镜像

#下载最新镜像
docker pull registy.docker-cn.com/library/sonarqube

3.登陆sonar,查询本机用户信息

登陆sonar,http://localhost:9000

管理员信息:admin/admin token:c6ccba881916029ae8a0a73912c59c4de34a05e

普通用户信息:chenyi/1213456 token:4d8c4a1b76061d6a0b019fb97b472a8a2ede9397

3.1新建用户

  • Administration-Security-Users-Create User

  • 填写用户名login和组名name

  • 点击Token添加字段,生成Token

3.根据生成的token获取执行代码,留作备用

3.1 java+maven

mvn sonar:sonar \
-Dsonar.host.url=http://localhost:9000 \
-Dsonar.login=9c6ccba881916029ae8a0a73912c59c4de34a05e

3.2 Android:java+gradle

  • 步骤一:在build.gradle开始添加如下代码
plugins {
id "org.sonarqube" version "2.6"
}
  • 步骤二:执行
./gradlew sonarqube \
-Dsonar.host.url=http://localhost:9000 \
-Dsonar.login=9c6ccba881916029ae8a0a73912c59c4de34a05e

3.3 管理员设置选项

Administration-Configuration:可以针对语言,进行分析设置。以Java为例,可以设置JaCoCo、Junit选择路径



Administration-Security:用户权限修改,一般默认即可

Administration-Project:当前项目和后台任务

Administration-System:配置信息

Administration-Marketplace:存储了第三方的插件

4.sonar-scanner的使用

Analyzing+with+SonarQube+Scanner地址

4.1安装

  • Mac:brew install sonar-scanner
  • 下载根据平台下载或直接下载通用包,通用包需要设置环境变量





    根据文档要求:
  • 1.解压
  • 2.修改/conf/sonar-scanner.properties,添加sonar地址

  • 3.添加环境变量
export SONAR_HOME=/Users/chenshanju/Desktop/docker/sonar-scanner-3.2.0.1227/
export PATH=$SONAR_HOME/bin/:$PATH
  • 4.帮助

    -D 参数 -H 帮助 -V 版本 -X debug 调试

4.2下载示例

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

4.3执行

注意:切换到sonar-project.properties所在的目录,即/sonar-scanning-examples/sonarqube-scanner/

  • 方法1;使用项目自带的sonar-project.properties
sonar-sanner    #输入sonar-scanner即开始运行

sonar-project.properties内容

sonar.projectKey=org.sonarqube:sonarqube-scanner    #公司名:个人
sonar.projectName=chengyi1336 #项目名称
sonar.projectVersion=1.0 #版本号
sonar.sources=src,copybooks
sonar.sourceEncoding=UTF-8
## Cobol Specific Properties
# comma-separated paths to directories with copybooks
sonar.cobol.copy.directories=copybooks
# comma-separated list of suffixes
sonar.cobol.file.suffixes=cbl,cpy
sonar.cobol.copy.suffixes=cpy
## Flex Specific Properties
# retrieve code coverage data from the Cobertura report
sonar.flex.cobertura.reportPath=coverage-report/coverage-cobertua-flex.xml #所有关于覆盖率的文件都从该文件读
# PL/I Specific Properties
sonar.pli.marginLeft=2
sonar.pli.marginRight=0

  • 方法2.使用命令行指定projectKey,projectName,url,token

    切换到工程目录下面,指定项目名、项目路径、主机、token
sonar-scanner \
-Dsonar.projectKey=com.ali:chenyi \
-Dsonar.projectName=chenyi1111 \
-Dsonar.sources=. \
-Dsonar.host.url=http://localhost:9000 \
-Dsonar.login=4d8c4a1b76061d6a0b019fb97b472a8a2ede9397


bug 3个,0个漏洞,24个不规范代码,1.2%的代码覆盖率,25.4%的重复度,xml、python、PHP、JS、Flex有631个问题。

5.覆盖率

覆盖率读取文件在/sonarqube-scanner/coverage-report/coverage-cobertua-flex.xml。这种方式比较老,很少使用

2:34之前需要补充

5.更多sonarscanner信息请查看官网

https://docs.sonarqube.org/display/SCAN/Advanced+SonarQube+Scanner+Usages

1027代码审计平台 1-sonar scanner的更多相关文章

  1. 1027代码审计平台 3 Java maven

    使用成熟的构建工具对maven工程进行分析 官网:SCAN/Analyzing+with+SonarQube+Scanner+for+Maven 1.如下图修改settings.xml文件 1.1查看 ...

  2. 1027代码审计平台 2-sonarscanner项目变更

    修改version,可以获得新版本的解析数据,与以往结果比对,获取bug.漏洞.代码不规范.覆盖率等变化,重点关注新增的bug及问题分布 version参数修改 1.对sonar-project.pr ...

  3. sonar使用故障Unable to load component class org.sonar.scanner.report.ActiveRulesPublisher/Unable to load component interface org.sonar.api.batch.rule.ActiveRules: NullPointerException

    nginx后两个sonar负载分担 解决办法 Credit to @teryk-sonarsource-team, just making it an answer: Delete the direc ...

  4. 解决Unable to load component class org.sonar.scanner.report.ActiveRulesPublisher/Unable to load component interface org.sonar.api.batch.rule.ActiveRules: NullPointerException

    解决办法 Delete the directory data/es in your SonarQube installation. Restart SonarQube.

  5. 持续集成之②:整合jenkins与代码质量管理平台Sonar并实现构建失败邮件通知

    持续集成之②:整合jenkins与代码质量管理平台Sonar并实现构建失败邮件通知 一:Sonar是什么?Sonar 是一个用于代码质量管理的开放平台,通过插件机制,Sonar 可以集成不同的测试工具 ...

  6. Linux下SonarQube代码质量平台的安装和使用方法

    Sonar简介: Sonar是一个用于代码质量管理的开源平台,用于管理源代码的质量,可以从七个维度检测代码质量 通过插件形式,可以支持包括java,C#,C/C++,PL/SQL,Cobol,Java ...

  7. Jenkins之Sonar 代码检查

    一.简介 SonarQube 是一个用于代码质量管理的开放平台.通过插件机制,Sonar 可以集成不同的测试工具,代码分析工具,以及持续集成工具.与持续集成工具(例如 Hudson/Jenkins 等 ...

  8. 代码规范审查 -Sonar环境搭建

    Sonar概述 Sonar 是一个用于代码质量管理的开放平台,可以进行代码质量的持续跟踪审查,支持的语言包含C#.java.PHP.C等.可以通过UI一睹Sonar的强大之处. Sonar安装     ...

  9. Jenkins集成Sonar Quabe和权限配置

    目录 安装Sonar Jenkins配置sonar Maven Jenkins Job配置 Pipeline Jenkins Job配置 Sonar权限管理 Sonar quality Gate通过阈 ...

随机推荐

  1. MyBatis的简单入门学习

    一个新知识开始是最难学的.(万事开头难) MyBatis大体分三层,接口层,数据处理层,基础支撑层. 其中接口层不是java中的那个interface,而是框架和程序员之间的对接.一个API,程序员可 ...

  2. Bootstrap and Angular

  3. pairs 和 ipairs区别

    local tab= { [] = "a", [] = "b", [] = "c" } for i,v in pairs(tab) do - ...

  4. 插入10W数据的两个程序比较

    程序1 添加10W数据 $count = 0; for ($i = 1;$i <= 100000 ;$i++) { $add_data = [ 'id' => $i, 'username' ...

  5. Android 自定义注解(Annotation)

    现在市面上很多框架都有使用到注解,比如butterknife库.EventBus库.Retrofit库等等.也是一直好奇他们都是怎么做到的,注解的工作原理是啥.咱们能不能自己去实现一个简单的注解呢. ...

  6. GitLab 使用指南(IntelliJ IDEA)

    一.环境 GitLab Community Edition 10.6.4 IntelliJ IDEA 2017.03 二.Git 使用 (Linux/MAC,cmd 模式) 本地新建项目(从Git服务 ...

  7. find ... -exec ... {} \; 的解释

    find的特殊功能是能够进行额外的动作,如上图的 find / -type f -name "test.txt" -exec rm {} \;命令 1) {} 代表的是由find找 ...

  8. Arrays.copyof(···)与System.arraycopy(···)区别

    首先观察先System.arraycopy(Object src, int srcPos, Object dest, int destPos, int length)的声明: public stati ...

  9. 2-10~2-11 配置iptables防火墙增强服务 selinux简单讲解

    学习一个服务的过程: 1.此服务器的概述:名字,功能,特点,端口号 2.安装 3.配置文件的位置 4.服务启动关闭脚本,查看端口 5.此服务的使用方法 6.修改配置文件,实战举例 7.排错(从下到上, ...

  10. HDU 4522 (恶心建图)

    湫湫系列故事——过年回家 Time Limit: 500/200 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Total ...