静态代码分析基础知识及分析工具

2023-08-03 12:30:25

安全之安全(security²)博客目录导读 

ATF(TF-A)/OPTEE之静态代码分析汇总


目录

一、静态代码分析介绍

二、静态代码分析工具

三、Sonarlint静态代码分析工具介绍

1. 定义

2. 特性

3. SonarQube 的官方文档


一、静态代码分析介绍

        根据维基百科,静态代码检查又称为静态程序分析,是指在不运行计算机程序的条件下,进行程序分析的方法。静态代码检查工具会从词法、语法、语义等多维度去对工程代码扫描分析,发现可能存在的问题,比如变量未定义、类型不匹配、变量作用域问题、数组下标越界、内存泄露等问题。工具会按照自己的规则进行问题的严重等级划分,给出不同的标识和提示。

        通常情况下,静态代码检查之后大家都会去将错误清零,但是有些警告不影响程序功能就忽略不去修改了。同时修改这类问题需要投入的时间比较多,增加了团队的工作量。而且对于新人来说,如果不熟悉代码框架的情况,修改静态检查问题的时候还有可能导致出现新的bug出现。有时工具还存在误报的情况等等,所以就出现了文章开头中团队的吐槽点:check清零。既然如此,为什么要进行静态代码检查呢?

        代码是软件的“基因”,在代码层次上进行静态分析,相对于传统的动态功能测试、单元测试、渗透更加系统和精确。首先,程序的静态分析可以打开程序的结构,从程序的逻辑结构进行分析,这种白盒的方式能够明显降低漏报。其次,代码分析往往在软件开发或测试阶段,研究表明,开发阶段发现缺陷的成本是测试1/4,是运行阶段的1/10,而开发阶段发现出现缺陷的数量是测试阶段3倍,是运行阶段的10倍。由此,越来越多的组织采用源代码检测工具进行质量或安全检测,代码审计也成了很多工业标准(IEC61508、DO-178B/C等)和安全标准(等保2.0等)必要的检测手段。近年来,源代码静态分析工具种类众多,很多企业希望通过部署源代码检测产品来验证和解决软件开发和测试过程中的出现的代码问题。

        静态代码检查也叫静态测试,是质量内建举措中的测试左移实践之一,在静态代码检查阶段发现代码的问题修复成本是很低的。

二、静态代码分析工具

        2021年,鸿渐科技启动了关于SDL和开发安全的代码分析工具项目。调研了很多产品的功能及POC,根据Gartner和国内权威第三方调研机构的调研,选出了若干获得普遍认可的工具,如国外的Fortify、checkmarx、Klocwork和Coverity,国内的代码卫士、Wukong、鸿渐SAST和酷德啄木鸟。

表1:国外产品对比(含鸿渐SAST)

注:国外工具1-4为Fortify、checkmarx、Klocwork和Coverity中的某一款,排序无对应关系。

表二:国内产品对比

注:国内工具1-3为代码卫士、Wukong和酷德啄木鸟中的某一款,排序无对应关系。

三、Sonarlint静态代码分析工具介绍

        作为初步静态代码分析使用,我们选择开源的sonar工具。它使用起来方便高效,便于开发阶段提前发现问题,提升产品质量。

1. 定义

sonar是一个代码质量管理的开源平台,用于管理源代码的质量,通过插件形式,可以支持包括java、C#、JavaScript等二 十余种编程语言的代码质量管理与检测。

2. 特性

对代码复杂度的一个分析
复杂度过高导致的后果
(1) 很难理解
(2) 很难维护
(3) 很容易出错
检测重复的代码
函数更改,很容易忘记一起更改。 复用代码可以提高效率
检测单元测试的覆盖率
白盒测试的一种方法
检测代码是否符合相应标准
规范化和标准化,提高代码的可读性
没有足够的或者过多的注释
如果说注释太少:阅读性过低
注释过多:开发人员将花费太多时间阅读和理解,违背了初衷
检测存在的潜在的bug
比如死代码等
检测设计和架构
检测耦合等

3. SonarQube 的官方文档

SonarQube是管理代码质量的一个开放平台,可以快速的定位代码中潜在的或者明显的错误。

官网见 https://www.sonarqube.org/

在这里插入图片描述

参考:
1、https://www.zhihu.com/question/28764803/answer/2120512077

2、Sonar 简介 SonarQube_sonar和sonarqube区别_皮酱的博客-CSDN博客

3、8款国内外代码分析工具对比测试,来看哪一款适合你 - 安全牛

更多推荐

Java手写Prim算法和Prim算法应用拓展案例

Java手写Prim算法和Prim算法应用拓展案例1.算法思维导图以下是使用Mermanid代码表示的Prim算法实现原理:#mermaid-svg-W6cUKRD3qrphQAun{font-family:"trebuchetms",verdana,arial,sans-serif;font-size:16px;fi

IP代理安全吗?如何防止IP被限制访问?

你是否遇到过可以正常上网,但访问某个网站却被禁止?注册某个网站账号,却被封号?那都是因为IP出现问题!您的IP地址透露很多关于您的信息,包括您的位置和互联网活动。在本文中,我们将一起了解IP地址,网站如何利用它来跟踪您,以及与IP代理如何帮助您更好的推进业务。什么是IP地址?IP地址是互联网协议地址(InternetP

hive 中正则表表达式使用

一概念概念:正则表达式(RegularExpression),又称规则表达式,是记录文本规则的代码。通常被用来检索、替换那些符合某个模式(规则)的文本。特性:最初是由Unix中的工具软件(例如sed和grep)普及开的,现在许多程序设计语言都支持利用正则表达式。常见缩写:正则表达式在代码中,通常缩写成regex、reg

etcd实现大规模服务治理应用实战

导读:服务治理目前越来越被企业建设所重视,特别现在云原生,微服务等各种技术被更多的企业所应用,本文内容是百度小程序团队基于大模型服务治理实战经验的一些总结,同时结合当前较火的分布式开源kv产品etcd,不仅会深入剖析ectd两大核心技术Raft与boltdb的实现原理,也会披露服务治理真实实践的经验,希望帮助大家在服务

怒刷LeetCode的第8天(Java版)

目录第一题题目来源题目内容解决方法方法一:双指针和排序​编辑第二题题目来源题目内容解决方法方法一:双指针方法二:递归方法三:快慢指针方法四:栈第三题题目来源题目内容解决方法方法一:栈方法二:字符串替换方法三:链表方法四:栈和正则表达式第一题题目来源18.四数之和-力扣(LeetCode)题目内容解决方法方法一:双指针和

设计模式之抽象工厂

抽象工厂模式结构图抽象工厂模式,提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类工厂方法模式,定义一个用于创建对象的接口,让子类决定实例化哪一个类。抽象工厂模式是围绕一个超级工厂创建其他工厂。该超级工程又称为其他工厂的工厂。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式产品族:一个工

常用设计模式—

一、设计模式简介23种设计模式1.1、设计模式七大原则1.开闭原则对扩展开放,对修改关闭。2.依赖倒置原则(面向接口编程)依赖关系通过接口、抽象类。3.单一职责原则一个类、接口、方法只负责一项职责或职能。4.接口隔离原则客户端不需要多余的接口,一个类对另一个类的依赖建立在最小的接口上。5.迪米特法则(最少知道原则)一个

Stream

文章目录1.概述2.创建3.使用案例使用的员工类3.1遍历/匹配(foreach/find/match)3.2筛选(filter)3.3聚合(max/min/count)3.4映射(map/flatMap)3.5归约(reduce)3.6收集(collect)3.6.1归集(toList/toSet/toMap)3.6

AI独角兽第四范式开启招股:或将成为今年港股IPO最大赢家!

国内最大的以平台为中心的决策类人工智能公司第四范式,在9月18日至9月21日招股,并计划于9月28日正式以“6682”为股票代码在香港联交所主板挂牌上市。第四范式即将成为近两年来第一家登陆港交所的AI独角兽企业,同时也将是近一年来第一家完成港股IPO的硬科技企业。和这些响亮称号相对应的火爆的认购,目前展现出来的孖展已超

git的使用

1)git的学习及总结可以用通配符添加多个文件,如gitadd*.txt;gitadd.//把当前所有文件都添加到暂存区中gitresettest.txt//取消暂存gitcommit-m"提交的信息"//这个信息会被提交到仓库中,作为版本管理的凭证//git只会提交到暂存区中的文件,而不会提交工作中的其他文件!rep

js制作柱状图的x轴时间, 分别展示 月/周/日 的数据

背景有个需求是要做一个柱状图,x轴是时间,y轴是数量.其中x轴的时间有三种查看方式:月份/周/日,也就是分别查看从当前日期开始倒推的最近每月/每周/每日的数量.本篇文章主要是用来制作三种不同的x轴从当前月开始倒推月份注意getMonth()函数可以获取当前月份,但是范围是0-11,0代表1月letxArr=[];//用

热文推荐