关于代码扫描中的警报
您可以配置代码扫描,以使用默认的 CodeQL 分析、第三方分析或多种分析类型来检查仓库中的代码。分析完成后,生成的警报会在仓库的安全视图中并排显示。第三方工具或自定义查询的结果可能不包含 GitHub 默认 CodeQL 分析检测到的警报所具备的所有属性。有关更多信息,请参阅 配置代码扫描的默认设置 和 配置代码扫描的高级设置。
默认情况下,代码扫描会定期在默认分支以及拉取请求期间分析您的代码。有关在拉取请求上管理警报的信息,请参阅 在拉取请求中分流代码扫描警报。
您可以使用 GitHub Copilot Autofix 自动为代码扫描警报(包括 CodeQL 警报)生成修复方案。有关更多信息,请参阅 解决代码扫描警报。
对于来自 CodeQL 分析的代码扫描警报,您可以使用安全概览查看 CodeQL 在组织内各仓库的拉取请求中的表现,并识别可能需要采取行动的仓库。有关更多信息,请参阅 CodeQL 拉取请求警报指标。
您可以使用 GitHub 工具审计针对代码扫描警报所采取的操作。有关更多信息,请参阅 审计安全警报。
关于警报详情
每个警报都会突出代码中的问题以及识别该问题的工具名称。您可以看到触发警报的代码行,以及警报的属性,例如警报严重程度、安全严重程度以及问题的性质。警报还会告知您该问题首次出现的时间。对于 CodeQL 分析识别的警报,您还会看到如何修复该问题的信息。
警报页面上的状态和详情仅反映仓库默认分支上警报的状态,即使该警报在其他分支中也存在。您可以在警报页面右侧的 受影响的分支 部分查看非默认分支上警报的状态。如果默认分支中不存在该警报,警报状态将显示为 “in pull request” 或 “in branch”,并以灰色显示。开发 部分显示将修复该警报的关联分支和拉取请求。

您还可以查看受影响的分支,以及针对警报的修复和关联的拉取请求。这有助于您和团队了解修复警报的进展情况。

如果使用 CodeQL 配置代码扫描,您还可以在代码中发现数据流问题。数据流分析能够找出代码中的潜在安全问题,例如:不安全地使用数据、向函数传递危险参数以及泄露敏感信息。
当代码扫描报告数据流警报时,GitHub 会展示数据在代码中的流动方式。代码扫描帮助您识别泄露敏感信息的代码区域,以及可能成为恶意用户攻击入口的地方。
关于来自多个配置的警报
您可以在仓库上运行多个代码分析配置,使用不同的工具并针对不同的语言或代码区域。每个代码扫描配置会生成一组独特的警报。例如,通过 GitHub Actions 使用默认 CodeQL 分析生成的警报来自的配置与通过代码扫描 API 外部上传的警报配置不同。
如果使用多个配置来分析同一个文件,同一查询检测到的任何问题都会作为由多个配置生成的警报报告。如果同一警报存在于多个配置中,配置数量会显示在警报页面右侧 “受影响的分支” 部分的分支名称旁边。要查看警报的配置,请在 “受影响的分支” 部分点击相应分支。会弹出 “分析的配置” 模态框,列出为该分支生成警报的每个配置名称。每个配置下方会显示该配置的警报最近一次更新的时间。
同一警报可能因不同配置而显示不同状态。要更新警报状态,请重新运行每个已过期的配置。或者,您也可以从分支中删除过期的配置,以移除已失效的警报。有关删除过期配置和警报的更多信息,请参阅 解决代码扫描警报。
关于在应用代码中未找到的警报标签
GitHub 会为在应用代码中未找到的警报分配一个类别标签。该标签与警报所在的位置有关。
- Generated: 构建过程生成的代码
- Test: 测试代码
- Library: 库或第三方代码
- Documentation: 文档
代码扫描按文件路径对文件进行分类。您无法手动对源文件进行分类。
在此示例中,警报列表中标记了该警报属于 “Test” 代码。

单击查看警报详情时,您可以看到文件路径被标记为 “Test” 代码。

注意
代码扫描的实验性警报曾在 JavaScript 的公共预览版中使用 CodeQL Action 的实验技术提供。此功能已停止。有关更多信息,请参阅 CodeQL 代码扫描停止使用机器学习驱动的警报。
关于警报严重程度和安全严重程度级别
代码扫描警报的严重程度级别指示该问题为代码库增加的风险程度。
- 严重程度。 所有代码扫描警报的级别为
Error、Warning或Note。 - 安全严重程度。 使用 CodeQL 找到的每个安全警报还具有
Critical、High、Medium或Low四种安全严重程度级别。
当警报具有安全严重程度级别时,代码扫描会优先显示并使用该级别,而不是 severity。安全严重程度级别遵循业界标准的通用漏洞评分系统(Common Vulnerability Scoring System,CVSS),该系统也用于 GitHub Advisory Database 中的 advisory。更多信息请参阅 CVSS:定性严重性评级尺度。
安全严重程度级别的计算
当将安全查询添加到 CodeQL 默认或扩展查询套件时,CodeQL 工程团队按如下方式计算安全严重程度。
- 搜索所有被分配了与新安全查询相关的一个或多个 CWE 标记的 CVE。
- 计算这些 CVE 的 CVSS 分数的第 75 百分位数。
- 将该分数定义为该查询的安全严重程度。
- 在显示查询发现的警报时,使用 CVSS 定义将数值分数转换为
Critical、High、Medium或Low。
更多信息请参阅 CodeQL 文档站点上的 CodeQL CWE 覆盖率。
关于拉取请求中的警报
代码扫描警报可以作为检查结果和注释出现在拉取请求中。这发生在以下任意一种代码扫描配置的仓库中:
- 配置为拉取请求检查(默认仅限于目标为默认分支的拉取请求)
- 配置为每次推送代码后进行扫描(结果会映射到所有打开的拉取请求)
只有当警报识别的 所有 代码行都出现在拉取请求的差异中时,您才会在该拉取请求中看到警报。
根据分支保护规则,“代码扫描结果”检查可能是必需的检查,阻止拉取请求在通过检查前合并。