如何理解和处理CodeQL代码扫描结果
如何理解和处理CodeQL代码扫描结果
CodeQL是一种强大的语义代码分析引擎,能够帮助开发者检测代码中的安全漏洞和质量问题。本文将详细介绍如何查看CodeQL分析结果、处理代码扫描警报,以及如何关闭或删除警报。
在前面的单元中,你创建了一个数据库,并扫描了从代码中提取的文件。 现在,可以查看结果并确定是否有安全漏洞需要解决。
查看 CodeQL 分析的的代码扫描结果
解释的查询结果会自动显示在用于 VS Code 的 CodeQL 扩展的源代码中。 CodeQL CLI 生成的输出结果可以采用多种格式,适用于各种工具。
可以通过修改查询的 select
语句来控制分析结果在源代码中显示的方式。 开发查询时,可以使结果清晰明了,且方便其他用户理解。 在查询控制台或用于 VS Code 的 CodeQL 扩展中编写自己的查询时,对于可以选择的内容没有限制。
如果要使用查询在 GitHub 代码扫描中创建警报,或通过使用 CodeQL CLI 生成有效的分析结果,则需使 select
语句以所要求的格式报告结果。
处理代码扫描警报
可以设置代码扫描以检查存储库中的代码。 可以使用默认的 CodeQL 分析、非 Microsoft 分析或其他类型的分析。 生成的警报并排显示在存储库中。
GitHub 的默认 CodeQL 分析可能包含其他警报属性,而不是包含来自非 Microsoft 工具或自定义查询的结果。 在默认工作流中,代码扫描在默认分支上和拉取请求期间定期分析代码。
每个警报包括以下信息:
代码问题和识别它的工具的名称
触发警报的代码行
警报属性,例如严重性
安全严重性
当问题出现时
问题的性质
信息还包括 CodeQL 分析识别到警报时如何解决问题。 此外,通过 CodeQL 进行代码扫描可以检测代码中的数据流问题。
数据流警报
数据流分析在代码中查找潜在的安全问题,包括:
以损害安全性的方式使用数据。
将危险参数传递给函数。
泄露敏感信息。
代码扫描报告数据流警报时,GitHub 将向你展示数据通过代码移动的方式。 可以使用这些数据流警报来识别泄露敏感信息的代码区域。 此知识助于识别恶意用户攻击的入口点。
严重性级别
默认情况下,严重性为 Error
的任何代码扫描结果都会导致检查失败。 警报严重性级别为 Error
、Warning
和 Note
。 可以指定触发代码扫描警报的拉取请求应失败的严重性级别。
安全严重性级别
代码扫描生成的安全查询显示了警报的安全严重性级别。 安全严重性级别为 Critical
、High
、Medium
和 Low
。 GitHub 使用常见漏洞评分系统 (CVSS) 数据来计算警报的安全严重性。
默认情况下,安全严重性为 Critical
或 High
的任何代码扫描结果都会导致检查失败。 可以指定哪个安全严重性级别应导致代码扫描结果检查失败。
关闭代码扫描警报
有两种方法来关闭警报:
消除代码扫描警报
取消显示警报是关闭你认为不需要修复的警报的一种方法。 一个示例是代码中仅用于测试的错误。 如果修复错误所需的工作量大于改进代码的潜在好处,还可以消除警报。
可从代码中的代码扫描注释或“安全性”选项卡上的摘要列表中消除警报。若要从列表中消除警报,请选择“消除警报”菜单,选择消除原因,然后选择“消除警报”按钮。
当您忽略警报时:
它在所有分支中被忽略。
它已从项目的当前警报数量中删除。
它已移动到警报摘要中的“已关闭”列表。 如有必要,可以从此处重新打开它。
已记录关闭警报的原因。
下次运行代码扫描时,相同的代码将不会生成警报。
删除代码扫描警报
如果具有存储库的管理员权限,可以删除警报。 删除警报在以下情况下非常有用:
设置了代码扫描工具,但后来决定将其删除。
使用比要继续使用的查询更大的一组查询配置了 CodeQL 分析。
从工具中删除了一些查询。
想要清理代码扫描结果。
可以从“安全性”选项卡上的摘要列表中删除警报。
删除警报时:
它在所有分支中被删除。
它将从项目的当前警报数量中删除。
它不会添加到警报摘要中的“已关闭”列表。
如果生成警报的代码保持不变,并且在不更改任何配置的情况下再次运行相同的代码扫描工具,则警报会再次出现在分析结果中。