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 标准部署
#此处依然采用的是内嵌型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.添加环境变量 ```#shell 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