关于代码扫描警报
您可以配置代码扫描以使用默认的 CodeQL 分析、第三方分析或多种类型的分析来检查仓库中的代码。分析完成后,生成的警报将并排显示在仓库的安全视图中。第三方工具或自定义查询的结果可能不包含您在 GitHub 默认 CodeQL 分析检测到的警报中看到的所有属性。有关更多信息,请参阅“配置代码扫描的默认设置”和“配置代码扫描的高级设置”。
默认情况下,代码扫描会定期分析默认分支中的代码以及拉取请求中的代码。有关管理拉取请求中警报的信息,请参阅“在拉取请求中分类代码扫描警报”。
您可以使用 GitHub Copilot Autofix 自动生成代码扫描警报(包括 CodeQL 警报)的修复程序。有关更多信息,请参阅“解决代码扫描警报”。
您可以使用 GitHub 工具审核为响应代码扫描警报而采取的操作。有关更多信息,请参阅“审核安全警报”。
关于警报详细信息
每个警报都会突出显示代码中的问题以及识别该问题的工具的名称。您可以查看触发警报的代码行,以及警报的属性,例如警报严重性、安全严重性和问题的性质。警报还会告诉您问题何时首次出现。对于通过 CodeQL 分析识别的警报,您还将看到有关如何解决该问题的信息。
即使警报存在于其他分支中,警报页面上的状态和详细信息也仅反映仓库默认分支中警报的状态。您可以在警报页面右侧的“受影响的分支”部分查看非默认分支中警报的状态。如果警报不存在于默认分支中,则警报的状态将显示为“在拉取请求中”或“在分支中”,并且颜色为灰色。
如果使用 CodeQL 配置代码扫描,您还可以查找代码中的数据流问题。数据流分析查找代码中的潜在安全问题,例如:不安全地使用数据、向函数传递危险的参数以及泄露敏感信息。
当代码扫描报告数据流警报时,GitHub 会向您展示数据如何在代码中移动。代码扫描使您可以识别泄露敏感信息的代码区域,这些区域可能是恶意用户发起攻击的入口点。
关于来自多个配置的警报
您可以对存储库运行代码分析的多个配置,使用不同的工具并针对不同的语言或代码区域。代码扫描的每个配置都会生成一组唯一的警报。例如,使用默认 CodeQL 分析和 GitHub Actions 生成的警报与外部生成并通过代码扫描 API 上传的警报来自不同的配置。
如果您使用多个配置来分析文件,则由同一查询检测到的任何问题都将报告为由多个配置生成的警报。如果某个警报存在于多个配置中,则“受影响的分支”部分(警报页面右侧)中分支名称旁边会显示配置数量。要查看警报的配置,请在“受影响的分支”部分中点击一个分支。将显示一个“正在分析的配置”模态窗口,其中包含为该分支生成警报的每个配置的名称。在每个配置下方,您可以看到该配置的警报上次更新的时间。
警报可能会从不同的配置中显示不同的状态。要更新警报状态,请重新运行每个过期的配置。或者,您可以从分支中删除过时的配置以删除过时的警报。有关删除过时配置和警报的更多信息,请参阅“解决代码扫描警报”。
关于在应用程序代码中找不到的警报的标签
GitHub 会为在应用程序代码中找不到的警报分配一个类别标签。该标签与警报的位置相关。
- 生成:构建过程中生成的代码
- 测试:测试代码
- 库:库或第三方代码
- 文档:文档
代码扫描按文件路径对文件进行分类。您不能手动对源文件进行分类。
在此示例中,警报在代码扫描警报列表中被标记为位于“测试”代码中。
当您点击查看警报详细信息时,您可以看到文件路径被标记为“测试”代码。
注意
代码扫描的实验性警报在 CodeQL 操作中使用实验性技术公开预览版发布的 JavaScript 中可用。此功能已停用。有关更多信息,请参阅 CodeQL 代码扫描弃用基于机器学习的警报。
关于警报严重性和安全严重性级别
代码扫描警报的严重性级别指示问题对代码库增加了多少风险。
- 严重性。所有代码扫描警报都具有
错误
、警告
或注意
级别。 - 安全严重性。使用 CodeQL 找到的每个安全警报还具有
严重
、高
、中
或低
的安全严重性级别。
当警报具有安全严重性级别时,代码扫描会显示并优先使用此级别而不是严重性
。安全严重性级别遵循行业标准的通用漏洞评分系统 (CVSS),该系统也用于 GitHub 安全建议数据库中的安全建议。有关更多信息,请参阅 CVSS:定性严重性评级量表。
代码扫描警报的拉取请求检查失败
您可以使用规则集来阻止拉取请求在满足以下任一条件时合并
-
必需工具发现严重性在规则集中定义的代码扫描警报。
-
必需的代码扫描工具的分析仍在进行中。
-
未为存储库配置必需的代码扫描工具。
有关更多信息,请参阅“设置代码扫描合并保护”。有关规则集的更多一般信息,请参阅“关于规则集”。
安全严重性级别的计算
将安全查询添加到 CodeQL 默认或扩展查询套件时,CodeQL 工程团队会按如下方式计算安全严重性。
- 搜索为新安全查询关联的一个或多个 CWE 标签分配的所有 CVE。
- 计算这些 CVE 的 CVSS 分数的第 75 个百分位数。
- 将该分数定义为查询的安全严重性。
- 显示查询找到的警报时,使用 CVSS 定义将数值分数转换为
严重
、高
、中
或低
。
有关更多信息,请参阅 CodeQL 文档网站上的 CodeQL CWE 覆盖范围。