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