zoukankan      html  css  js  c++  java
  • 1027代码审计平台 1-sonar scanner

    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

  • 相关阅读:
    flask 源码专题(七):threading.local和高级
    flask 源码专题(六):session处理机制
    flask 源码专题(五):SqlAlchemy 中操作数据库时session和scoped_session的区别
    flask 源码专题(四):wtforms Form实例化流程以及csrf验证
    flask 源码专题(三):请求上下文和应用上下文入栈与出栈
    python 追踪函数调用
    flask 源码专题(一):app.run()的背后
    flask 源码专题(二):请求上下文与全文上下文
    边框间距 | border-spacing (Miscellaneous Level 2)
    边框样式属性 | border-top-style (Backgrounds & Borders)
  • 原文地址:https://www.cnblogs.com/csj2018/p/9860406.html
Copyright © 2011-2022 走看看