背景:
Dev已经习惯使用Sonarqube进行静态代码扫描,现准备进行阶段审计看下使用效果怎么样。
Dev已经习惯使用Sonarqube进行静态代码扫描,现准备进行阶段审计看下使用效果怎么样。
1 | 公司使用java语言开发Android项目,使用Gradle作为构建工具。 |
点击Quality Profiles查看Android Lint规则
我们配置一个新的Quality Profiles/java用于Android项目扫描。
新规则 包含Java Sonar way的Bugs、Vulnerabilities 和 Android Lint的Code Smells
1 | systemProp.sonar.host.url=http://ip:9000 |
1 | apply plugin: "org.sonarqube" |
执行gradle lintDebug 生成lint-results-debug.xml
执行gradle Sonarqube 构建、分析、上传
参考链接:官方文档
本文只涉及maven和sonar-scanner方式,其它请参考上面链接。
适合Maven项目
1 | <profile> |
PS:
1 | 如果代码库pom文件配置如下 |
适合所有项目
1 | #Configure here general information about the environment, such as SonarQube DB details for example |
1 | # must be unique in a given SonarQube instance |
点击:http://ip:9000/web_api/ ,查看Sonarqube支持的web_api。
以Python2.7 为例简单介绍api使用:
1 | #! /usr/bin/env python |
登录Sonarqube服务器,修改安装目录下的conf\sonar.properties文件。
1 | # LDAP configuration |
然后重启Sonarqube服务,即可使用LDAP账户进行登录。
下面配置涉及下图:
1 | # 下面以QQ邮箱为例 |
因为Sonarqube是为了发现代码问题,所以会在结果中展示源代码。为了代码安全,需要对权限进行配置。
1 | 使用管理员账户登录Sonarqube,点击Administration - General Settings - security |
1 | 使用管理员账户登录Sonarqube,点击Administration - Security - Users |
1 | 使用管理员账户登录Sonarqube,点击Administration - Security - Groups |
1 | 使用管理员账户登录Sonarqube,点击Administration - Security - Global Permissions |
1 | 使用管理员账户登录Sonarqube,点击Administration - Security - Permission Templates |
配置项目权限,有下面两种方法:
1 | 点击项目界面 - Administration - Permissions |
1 | 使用管理员账户登录Sonarqube,点击Administration - Projects - Management |
配置扫描使用的规则
PS:
安装JDK
1 | C:\Users\Administrator>java -version |
安装Mysql
1 | C:\Users\Administrator>mysql -V |
创建数据库和用户
1 | # 创建sonar数据库 |
安装Sonarqube
解压缩sonarqube-6.3.1.zip到D:\scm\sonarqube-6.3.1
修改配置D:\scm\sonarqube-6.3.1\conf\sonar.properties
配置Sonarqube windows服务
网页端登陆配置Sonarqube
在安装的过程中遇到问题:
1 | 2017.06.20 14:34:50 ERROR web[][o.a.c.c.C.[.[.[/]] Exception sending context initialized event to listener instance of class org.sonar.server.platform.web.PlatformServletContextListener |
解决方法:
如果Mysql数据库启用了binarylog的话,请设置为row格式。否则在启动Sonarqube的时候创建数据库表会报下面错误:
1 | Error updating database. Cause: java.sql.SQLException: Cannot execute statement: impossible to write to binary log since BINLOG_FORMAT = STATEMENT and at least one table uses a storage engine limited to row-based logging. InnoDB is limited to row-logging when transaction isolation level is READ COMMITTED or READ UNCOMMITTED. |
工具 | 源代码分析 | 字节码分析 | 定位 | 官网地址 | 版本 | 其它语言支持 |
---|---|---|---|---|---|---|
Checkstyle | Y | 验证符合编码规则 | http://checkstyle.sourceforge.net | 7.8.2(2017.6.18) | ||
FindBugs | Y | 发现Bugs | http://findbugs.sourceforge.net | 3.0.1(2015.3.6) | ||
PMD | Y | 发现缺陷 | https://pmd.github.io | 5.8.0(2017.6.24) | Y | |
Sonarqube | Y | Y | 持续质量平台 | https://www.sonarqube.org | 6.3.1(2017.4.12) | Y |
1 | 最初Sonarqube只是做静态代码分析结果聚类展示。 |
官网:检查规则
主要涉及以下几个方面:
官网:检查规则
主要涉及以下几个方面:
官网:Java检查规则
主要涉及以下几个方面:
官网:Java检查规则
主要涉及以下几个方面:
PM