C++代码扫描基础知识
在去年的时候,吉特哈布发布了代码扫描功能,这个功能可以将代码安全检查集成到开发者现有的持续集成(CI/CD)环境中。
在今天的这篇文章中,我们将会演示CodeQL和吉特哈布Actions的基础知识,有些人可能对这个CodeQL不太理解,说白了,CodeQL就是代码扫描组件的底层分析引擎。(好像没说得那么白,没关系,且看下文)
神马是CodeQL?
CodeQL是一个分析引擎,用来对照一个自动生成的数据库进行查询并执行代码安全检查。CodeQL数据库是在工厂编译的时候自动创建的,并以一种关系数据的形式来对代码进行抽象化。
在默认情况下,代码扫描功能会执行由吉特哈布研究者和社区编写的标准化的CodeQL查询语句,同时,如果有需要,你还可以执行自定义的查询。
默认的查询语句集合包括一些比较基本的,例如”指针溢出检查”, “可能对snprintf的溢出调用”, “未受控的格式化字符串”等,如下图所示:
在吉特哈布Actions中设置CodeQL
基于CodeQL的代码扫描是吉特哈布公共仓库的免费功能,同时,也是吉特哈布企业版本中的高级安全功能的一部分。下面的动图展示了如何设置的步骤,其实也不复杂,就4个步骤,请看下面的动图:
就像从上图中看到的那样,设置的步骤很简单。默认情况下,每次你Push代码或者发起一次PR到默认分支时,CodeQL分析引擎就会对代码进行一次分析和扫描。
这就是说,当一个新的代码文件被提交到主分支时,对这个新文件的扫描就会在后台自动执行。
在吉特哈布Actions下的扫描标签页下,你可以查看扫描的结果,同时,也可以在安全标签页下查看或设置代码的扫描警告选项。
所谓基线
有时候,特别是对于大型遗留代码库,安全警告会出现得非常多。因为这个原因,CodeQL只会在PR中显示新的/已修复的警告。如果你希望管理现有的警告,则你需要在”安全”标签页下的”代码扫描警告”里做一些设定,如下图所示:
请特别注意上图中的”Dismiss”和”Delete”的区别。
一个很重要的区别是:当Dismiss一个警告时,相同的代码不会再重新生成这个警告。
当Delete一个警告时,相同的代码在下次扫描的时候,还是会重新生成相同的警告。
如果你希望批量Dismis一大波警告,则可以在警告的汇总界面进行设置(记住,请先过滤出你希望Dismiss的警告集合)。
总结
这篇文章主要是概要性地讲解了如何在持续集成环境中使用代码扫描功能。
当你掌握了这些基础知识之后,你可以进入下一阶段了,即可以执行自定义的CodeQL查询或者调整扫描的频率。
看起来,值得一试(Flag: 明天我一定试试)。
最后
Microsoft Visual C++团队的博客是我非常喜欢的博客之一,里面有很多关于Visual C++的知识和最新的开发进展。大浪淘沙,如果你对Visual C++这门古老的技术还是那么感兴趣,则可以经常去他们那(或者我这)逛逛。
本文来自:《Code Scanning C++ with GitHub Actions》
最近我写了个东西
正如你们所知道的,拓扑梅尔智慧办公平台(Topomel Box)是一款绿色软件,主要面向经常使用电脑的朋友。它提供了各种提升办公效率的小功能,同时操作上尽可能地简单方便。
我想:你值得拥有。
相关文章
- [C/C++基础知识] 面试再谈struct和union大小问题
- Qt-在WIN10上实现毛玻璃效果(Aero效果,QML实现的,并不是C++语法)
- C++判断两个double类型双精度浮点数是否同号
- C++:new的使用
- 传智播客c/c++公开课学习笔记--C语言与木马恶意代码分析和360安全防护揭秘
- c++ in nodejs (V8)
- 解决C/C++报错error: cannot pass objects of non-trivially-copyable type ‘std::string’问题
- [C++ 面试基础知识总结] 关联容器
- [C++ 面试基础知识总结] 顺序容器
- [C++ 面试基础知识总结] 类
- [C++ 面试基础知识总结]表达式和函数
- C++基础知识复习
- 【 华为OD机试 2023】 连接器问题(C++ Java JavaScript Python)
- 解答私信@被c++折磨头秃的花季美少女 //C++ 编写一个进阶版的进制转换程序,运行功能如下:请选择要输入的数字的进制(2、8、10、16):请输入该数字:请选择要转换成的进制(2、8。。。
- C++中for循环的5种语法(三十四)
- C++模块介绍第一部分:主模块接口
- 通过查看windbg中变量值去定位C++软件异常的又一典型案例分享
- 【基础知识】7、排序算法 C++ 程序
- C++基础知识要点--类(Primer C++ 第五版 · 阅读笔记)
- C++基础知识要点--表达式 (Primer C++ 第五版 · 阅读笔记)
- C/C++学习笔记十
- 【跟学C++】C++数学运算函数和随机数(Study7)
- VC++实现Windows中双显示器(主屏、扩展屏)各种操作的源码工程