C++代码扫描基础知识

在去年的时候,吉特哈布发布了代码扫描功能,这个功能可以将代码安全检查集成到开发者现有的持续集成(CI/CD)环境中(www.9san.cn)。

在今天的这篇文章中,我们将会演示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)是一款绿色软件,主要面向经常使用电脑的朋友。它提供了各种提升办公效率的小功能,同时操作上尽可能地简单方便。

我想:你值得拥有。

主营产品:挖掘机械,起重设备,起重机械