Skip to main content

关于代码扫描警报

了解不同类型的代码扫描警报以及有助于了解每个警报突出显示的问题的信息。

谁可以使用此功能?

具有写入访问权限的用户

Code scanning 可用于以下存储库类型:

  • GitHub.com 上的公共存储库
  • 启用了 GitHub Advanced Security 的 GitHub Enterprise Cloud 上的组织拥有的存储库

关于 code scanning 中的警报

可以配置 code scanning,以使用默认 CodeQL 分析、第三方分析或多种类型的分析来检查存储库中的代码。 分析完成后,生成的警报将并排显示在仓库的安全视图中。 第三方工具或自定义查询的结果可能不包括您在 GitHub 的默认 CodeQL 分析所检测的警报中看到的所有属性。 有关详细信息,请参阅“配置代码扫描的默认设置”和“配置代码扫描的高级设置”。

默认情况下, code scanning 定期在默认分支和拉取请求中分析您的代码。 有关管理拉取请求上警报的信息,请参阅“鉴定拉取请求中的代码扫描警报”。

可以使用 GitHub Copilot Autofix 自动为 code scanning 警报(包括 CodeQL 警报)生成修复。 有关详细信息,请参阅“解决代码扫描警报”。

使用 GitHub Copilot Enterprise 许可证,还可以向 GitHub Copilot Chat 寻求帮助,以更好地了解组织中存储库中的 code scanning 警报。 有关详细信息,请参阅“Asking GitHub Copilot questions in GitHub”。

对于来自 CodeQL 分析的 code scanning 警报,可以使用安全概览查看 CodeQL 在整个组织的存储库中的拉取请求中的执行情况,并确定可能需要采取措施的存储库。 有关详细信息,请参阅“查看拉取请求警报的指标”。

可以使用 GitHub 工具审核为响应code scanning警报而执行的操作。 有关详细信息,请参阅“审核安全警报”。

关于警报详细信息

每个警报都会高亮显示代码的问题以及识别该问题的工具名称。 你可以看到触发警报的代码行以及警报的属性,例如警报严重性、安全严重性和问题的性质。 警报还会告知该问题第一次被引入的时间。 对于由 CodeQL 分析确定的警报,您还会看到如何解决问题的信息。

警报页面上的状态和详细信息仅反映存储库默认分支上的警报状态,即使警报存在于其他分支中也是如此。 可以在警报页右侧的“受影响的分支”部分查看非默认分支上的警报状态。 如果默认分支中不存在警报,则警报的状态将显示为“在拉取请求中”或“在分支中”,并将变为灰色。

显示 code scanning 警报的元素的屏幕截图,包括左侧的警报标题和相关代码行以及右侧的严重性级别、受影响分支和弱点。

如果使用 CodeQL 配置 code scanning,则还可以在代码中发现数据流问题。 数据流分析将查找代码中的潜在安全问题,例如:不安全地使用数据、将危险参数传递给函数以及泄漏敏感信息。

当 code scanning 报告数据流警报时,GitHub 将显示数据在代码中如何移动。 Code scanning 可用于识别泄露敏感信息的代码区域,以及可能成为恶意用户攻击切入点的代码区域。

关于来自多个配置的警报

可以使用不同的工具和针对代码的不同语言或区域,在存储库上运行多个代码分析配置。 code scanning 的每个配置都会生成一组唯一的警报。 例如,使用默认 CodeQL 分析和 GitHub Actions 生成的警报与外部生成并通过 code scanning API 上传的警报用到的配置不同。

如果使用多个配置来分析文件,同一查询检测到的任何问题都将报告为多个配置生成的警报。 如果警报存在于多个配置中,则配置数会显示在警报页面右侧“受影响的分支”部分的分支名称旁边。 若要查看警报的配置,请在“受影响的分支”部分中单击分支。 此时将显示“配置分析”模式,其中包含生成该分支警报的每个配置的名称。 在每个配置下,可以看到该配置的警报上次更新的时间。

警报可能会显示不同配置的不同状态。 若要更新警报状态,请重新运行每个过时的配置。 或者,可以从分支中删除过时的配置,以删除过时的警报。 有关删除过时配置和警报的详细信息,请参阅“解决代码扫描警报”。

关于应用程序代码中未找到的警报的标签

GitHub Enterprise Cloud 向应用程序代码中找不到的警报分配类别标签。 标签与警报的位置相关。

  • Generated:生成过程生成的代码
  • Test:测试代码
  • Library:库或第三方代码
  • Documentation:文档

Code scanning 按文件路径对文件进行分类。 无法手动对源文件进行分类。

在此示例中,一个警报在 code scanning 警报列表中被标记为“测试”代码。

code scanning 列表中的警报的屏幕截图。 标题右侧的“测试”标签以深橙色轮廓突出显示。

单击以查看警报的详细信息时,可以看到文件路径被标记为“测试”代码。

显示警报详细信息的屏幕截图。 文件路径和“测试”标签以深橙色轮廓突出显示。

**注意:**code scanning 的实验性警报曾通过在 CodeQL 操作中使用实验技术针对 JavaScript 的 公共预览版 版本提供。 此功能 已停用。 有关详细信息,请参阅“CodeQL code scanning 弃用 ML 驱动的警报”。

关于警报严重性和安全严重性级别

code scanning 警报的严重性级别指示该问题将给代码库增加的风险大小。

  • 严重性。 所有 code scanning 警报的级别为 ErrorWarningNote
  • 安全严重性。 使用 CodeQL 找到的安全警报也有安全严重性级别,为 CriticalHighMediumLow

安全严重性级别优先于 severity 级别,当警报具有安全严重性级别时,code scanning 会优先显示并使用该级别。 安全严重性级别遵循行业标准的通用漏洞评分系统 (CVSS),该系统也用于 GitHub Advisory Database 中的公告。 有关详细信息,请参阅 CVSS:定性严重性评定标准

code scanning 警报的拉取请求检查失败

当满足以下条件之一时,可以使用规则集防止合并拉取请求:

  • 所需工具发现了一个 code scanning 警报,其严重性是在规则集中定义的。

  • 所需 code scanning 工具的分析仍在进行中。

  • 未为存储库配置所需的 code scanning 工具。

有关详细信息,请参阅“设置代码扫描合并保护”。 有关规则集的更多常规信息,请参阅“关于规则集”。

安全严重性级别的计算

将安全查询添加到 CodeQL 默认或扩展查询套件时,CodeQL 工程团队将会计算安全严重性,如下所示。

  1. 搜索分配了与新安全查询关联的一个或多个 CWE 标记的所有 CVE。
  2. 计算这些 CVE 的 CVSS 分数的第 75 百分位。
  3. 将该分数定义为查询的安全严重性。
  4. 显示查询找到的警报时,使用 CVSS 定义将数值分数转换为 CriticalHighMediumLow

有关详细信息,请参阅 CodeQL 文档网站中的 CodeQL CWE 覆盖率