Skip to main content

管理存储库的代码扫描警报

在安全视图中,可以查看、修复或消除项目代码中潜在漏洞或错误的警报。

谁可以使用此功能?

If you have write permission to a repository you can manage code scanning alerts for that repository.

Code scanning 可用于 GitHub.com 上的所有公共存储库。 若要在组织拥有的专用存储库中使用 code scanning,必须具有 GitHub Advanced Security 许可证。 有关详细信息,请参阅“关于 GitHub 高级安全性”。

查看仓库的警报

任何对仓库有读取权限的人都可以查看拉取请求上的 code scanning 注释。 有关详细信息,请参阅“鉴定拉取请求中的代码扫描警报”。

你需要写入权限才能在“安全”选项卡上查看存储库所有警报的摘要。

默认情况下,将筛选 code scanning 警报页面,以仅显示存储库默认分支的警报。

  1. 在 GitHub.com 上,导航到存储库的主页。

  2. 在存储库名称下,单击“ 安全性”。 如果看不到“安全性”选项卡,请选择 下拉菜单并单击“安全性” 。 存储库标头的屏幕截图,其中显示了选项卡。 “安全性”选项卡以深橙色边框突出显示。

  3. 在左侧边栏中,单击 Code scanning

  4. (可选)使用自由文本搜索框或下拉菜单来筛选警报。 例如,您可以通过用于识别警报的工具进行过滤。

    code scanning 警报页面的屏幕截图。 搜索框和筛选器下拉菜单以深橙色边框显示。

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

  6. (可选)如果警报突出显示数据流的问题,请单击“显示路径”以显示从数据源到使用它的接收者的路径。

    code scanning 警报的屏幕截图。 “显示路径”链接以深橙色轮廓突出显示。 还突出显示了下一步中所述的“显示更多”链接。

  7. 来自 CodeQL 分析的警报包括对问题的描述。 单击“显示更多”以获取有关如何修复代码的指导。

有关详细信息,请参阅“关于代码扫描警报”。

注意:可以在工具状态页上查看有关 code scanning 分析上次运行时间的信息。 有关详细信息,请参阅“关于代码扫描的工具状态页”。

筛选 code scanning 警报

您可以筛选 code scanning 警报视图中显示的警报。 如果存在许多警报,这将非常有用,因为您可以专注于特定类型的警报。 有一些预定义的筛选器和一系列关键字可用于优化显示的警报列表。

从下拉列表中选择关键字时,或者在搜索字段中输入关键字时,仅显示具有结果的值。 这样可以更容易地避免设置没有结果的筛选器。

code scanning 警报视图上的搜索字段的屏幕截图。 用户已在字段中键入了“branch:dependabot”。 下拉菜单中显示了名称包括“dependabot”的所有有效分支的名称。

如果输入多个筛选器,视图将显示与所有这些筛选器匹配的警报。 例如,is:closed severity:high branch:main 仅显示 main 分支上存在的已关闭高严重性警报。 例外情况是与 refs 相关的筛选器(refbranchpr):is:open branch:main branch:next 将显示来自 main 分支和 next 分支的开放式警报。

请注意,如果你已筛选掉非默认分支上的警报,但默认分支上存在相同的警报,则任何给定警报的警报页仍将仅反映默认分支上的警报状态,即使该状态与非默认分支的状态冲突也是如此。 例如,如果 branch-x 的警报摘要中的“未解决”列表中显示的警报已在默认分支上修复,该警报可能会在警报页上显示“已修复”状态。 可在警报页右侧的“受影响的分支”部分查看筛选的分支的警报状态。

你可以在 tag 筛选器前面加上 - 以排除带有该标记的结果。 例如,-tag:style 仅显示没有 style 标记的警报。

将结果限制为仅应用程序代码

可以使用“仅应用程序代码中的警报”筛选器或 autofilter:true 关键字和值,将结果限于应用程序代码中的警报。 有关自动标记为非应用程序代码的代码类型的详细信息,请参阅“关于代码扫描警报”。

搜索 code scanning 警报

您可以搜索警报列表。 如果仓库中存在大量警报,或者您不知道警报的确切名称,这很有用。 GitHub Enterprise Cloud 可执行以下自由文本搜索:

  • 警报的名称
  • 警报详细信息(这也包括默认情况下在“显示更多”可折叠部分中隐藏的信息)
支持的搜索语法示例结果
单字搜索injection返回包含单词 injection 的所有警报
多字词搜索sql injection返回包含 sqlinjection 的所有警报
精确匹配搜索
(使用双引号)
"sql injection"返回包含确切短语 sql injection 的所有警报
OR 搜索sql OR injection返回包含 sqlinjection 的所有警报
AND 搜索sql AND injection返回包含单词 sqlinjection 的所有警报

提示:

  • 多字词搜索等同于 OR 搜索。
  • AND 搜索将返回以任何顺序在警报名称或详细信息中的“任意位置”找到搜索词的结果。
  1. 在 GitHub.com 上,导航到存储库的主页。
  2. 在存储库名称下,单击“ 安全性”。 如果看不到“安全性”选项卡,请选择 下拉菜单并单击“安全性” 。 存储库标头的屏幕截图,其中显示了选项卡。 “安全性”选项卡以深橙色边框突出显示。
  3. 在左侧边栏中,单击 Code scanning
  4. 在“筛选器”下拉菜单右侧,在自由文本搜索框中键入关键字以进行搜索。 code scanning 警报视图上的搜索字段的屏幕截图。 字段包含预定义的筛选器“is: open branch:main”。 “sql or injection”的自由文本以深橙色框出。
  5. return。 警报列表将包含与搜索条件匹配的未处理 code scanning 警报。

跟踪议题中的 code scanning 警报

注意:议题中 code scanning 警报的跟踪目前为 beta 版本,可能会发生更改。

此功能支持使用 GitHub Actions 在本机运行分析,或使用现有 CI/CD 基础结构以及第三方 code scanning 工具在外部运行分析,但不支持第三方跟踪工具。

要快速创建问题来跟踪特定 code scanning 警报的状态,请在 code scanning 警报页上,单击要跟踪的警报。在该警报的详细页面上,单击“创建问题****”。 根据需要自定义自动生成的问题,然后单击“提交新问题****”。

或者,要跟踪已有问题中的 code scanning 警报,请将警报的 URL 添加为问题中的任务列表项。 有关任务列表的详细信息,请参阅“关于任务列表”。

有关创建问题以跟踪 code scanning 警报的详细信息,请参阅“使用任务列表跟踪问题中的代码扫描警报”。

修复警报

任何对仓库具有写入权限的人都可以通过提交对代码的更正来修复警报。 如果仓库已安排对拉取请求运行 code scanning,则最好通过拉取请求提交您的更正。 这将触发对更改的 code scanning 分析,并测试您的修复是否会带来任何新的问题。 有关详细信息,请参阅“自定义 代码扫描的高级设置”和“鉴定拉取请求中的代码扫描警报”。

如果你有存储库的写入权限,则可以通过查看警报摘要并单击“已关闭”来查看已修复的警报。 有关详细信息,请参阅“查看存储库的警报”。 “Closed(已关闭)”列表显示已修复的警报和用户已忽略的警报。

可使用自由文本搜索或筛选器显示警报子集,然后依次将所有匹配的警报标记为已关闭。

警报只能在一个分支中修复。 您可以在警报摘要上使用“Branch(分支)”过滤器检查警报是否是在特定分支中修复的。

code scanning 上搜索字段的屏幕截图,其中展开了“分支”下拉菜单。 “分支”按钮以深橙色框出。

请注意,如果你已筛选掉非默认分支上的警报,但默认分支上存在相同的警报,则任何给定警报的警报页仍将仅反映默认分支上的警报状态,即使该状态与非默认分支的状态冲突也是如此。 例如,如果 branch-x 的警报摘要中的“未解决”列表中显示的警报已在默认分支上修复,该警报可能会在警报页上显示“已修复”状态。 可在警报页右侧的“受影响的分支”部分查看筛选的分支的警报状态。

注意: 如果使用多个配置运行 code scanning,则有时多个配置会生成相同的警报。 除非定期运行所有配置,否则可能会看到在一个配置中已修复但在另一个配置中未修复的警报。 可以从分支中删除这些过时的配置和警报。 有关详细信息,请参阅“从分支中删除过时的配置和警报”。

消除警报

有两种方法可以关闭警报。 您可以修复代码中的问题,也可以忽略警报。

取消显示警报是关闭你认为不需要修复的警报的一种方法。 例如,仅用于测试的代码中有错误,或者修复错误的工作超过改进代码的潜在益处。 你可以从代码中的 code scanning 注释取消显示警报,或者从“安全”选项卡中的摘要列表取消显示警报。

当您忽略警报时:

  • 它在所有分支中被忽略。
  • 警报将从项目的当前警报数中删除。
  • 警报被移动到警报摘要中的“Closed(已关闭)”列表,需要时您可以在其中重新打开它。
  • 会记录关闭警报的原因。
  • (可选)可对关闭操作进行注释以记录警报关闭操作的上下文。
  • code scanning 下次运行时,相同的代码将不会生成警报。

要消除警报:

  1. 在 GitHub.com 上,导航到存储库的主页。

  2. 在存储库名称下,单击“ 安全性”。 如果看不到“安全性”选项卡,请选择 下拉菜单并单击“安全性” 。 存储库标头的屏幕截图,其中显示了选项卡。 “安全性”选项卡以深橙色边框突出显示。

  3. 在左侧边栏中,单击 Code scanning

  4. 如果要忽略警报,请务必先了解警报,以便选择正确的忽略原因。 单击要了解的警报。

  5. 查看警报,然后单击“消除警报”并选择或键入关闭警报的原因。 拉取请求中 code scanning 警报检查失败的屏幕截图。 失败检查中的“关闭警报”按钮以深橙色突出显示。 其中显示了“关闭警报”下拉列表。 从下拉菜单中选择合适的原因很重要,因为这可能会影响到是否继续将查询纳入未来的分析。 (可选)可对关闭操作进行注释,记录警报关闭情况的上下文。 关闭操作注释将添加到警报时间线,可在审核和报告期间用作理由。 可使用代码扫描 REST API 检索或设置注释。 注释包含在 alerts/{alert_number} 终结点的 dismissed_comment 中。 有关详细信息,请参阅“适用于代码扫描的 REST API 终结点”。

    如果将 CodeQL 警报作为误报予以忽略,例如因为代码使用了不受支持的清理库,请考虑参与 CodeQL 存储库并改进分析。 有关 CodeQL 的详细信息,请参阅“参与 CodeQL”。

一次忽略多个警报

如果项目有多个由于相同原因要忽略的警报,您可以从警报摘要中批量忽略它们。 通常,您需要过滤列表,然后忽略所有匹配的警报。 例如,您可能想要忽略项目中所有已标记为特定通用缺陷枚举 (CWE) 漏洞的当前警报。

重新打开已消除的警报

如果已消除警报,但后来意识到需要修复警报,可以重新打开警报,并使用代码修复问题。 显示关闭的警报列表,找到警报进行显示,然后重新打开。 然后,可以像修复其他警报一样修复该警报。

从分支中删除过时的配置和警报

你可能在单个存储库上有多个代码扫描配置。 运行时,多个配置可以生成相同的警报。 此外,如果配置按不同的计划运行,警报状态可能会因配置少见或过时而过时。 有关来自多个配置的警报的详细信息,请参阅“关于代码扫描警报”。

  1. 在 GitHub.com 上,导航到存储库的主页。

  2. 在存储库名称下,单击“ 安全性”。 如果看不到“安全性”选项卡,请选择 下拉菜单并单击“安全性” 。 存储库标头的屏幕截图,其中显示了选项卡。 “安全性”选项卡以深橙色边框突出显示。

  3. 在左侧边栏中,单击 Code scanning

  4. 在“Code scanning”下,单击“code scanning”警报。

  5. 在边栏的“受影响的分支”部分,单击所需的分支。

  6. 在“配置分析”对话框中,查看在所选分支上报告了此警报的配置的详细信息。 若要删除所需分支的多余配置,请单击

    如果错误地删除了配置,请单击“取消”以避免应用更改。

    “配置分析”模式的屏幕截图。 “删除配置”图标以深橙色标出。

  7. 删除任何多余的配置并确认显示了预期的配置后,单击“保存更改”。

    如果在意外删除配置后保存更改,请重新运行配置以更新警报。 有关重新运行使用 GitHub Actions 的配置的详细信息,请参阅“重新运行工作流程和作业”。

注意:

  • 如果删除默认存储库分支的所有 code scanning 配置,默认分支将保留在“受影响的分支”侧栏中,但不会被任何配置分析。
  • 如果删除非默认存储库分支的所有 code scanning 配置,该分支将从“受影响的分支”侧栏中删除。

审核对 code scanning 警报的响应

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

延伸阅读