Skip to main content

解决代码扫描警报

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

谁可以使用此功能?

具有写入访问权限的用户

为 code scanning 警报生成建议的修复方案

          GitHub Copilot自动修复 可以为由 code scanning 分析标识的警报生成修正方案。 支持大多数 CodeQL 警报类型。 请参阅“[AUTOTITLE](/code-security/concepts/code-scanning/copilot-autofix-for-code-scanning)”。

注意

无需订阅 GitHub Copilot 即可使用 GitHub Copilot自动修复。 Copilot自动修复 可供 GitHub.com 上的所有公共存储库使用,也可供具备 GitHub Code Security 许可证的组织和企业拥有的内部或私有存储库使用。

  1. 在 GitHub 上,导航到存储库的主页面。
  2. 在存储库名称下,单击 Security and quality 选项卡。如果看不到“ Security and quality”选项卡,请选择 下拉菜单,然后单击 Security and quality
  3. 在左边栏中,单击“ Code scanning”****。
  4. 单击警报的名称。
  5. 如果 Copilot自动修复 可以建议修复,请在页面顶部单击“ 生成修补程序”。
  6. 在页面底部生成建议的修复后,即可单击“使用修复创建 PR”,自动生成应用建议修复的拉取请求。 会从默认分支创建一个新分支,提交生成的修复方案并创建草稿拉取请求。 你可以像测试和编辑其他任何修复方案一样测试和编辑该建议的修复方案。

你还可以使用历史警报终结点的自动修复 API 来生成、获取和提交建议的修复方案。

将警报分配到 Copilot云代理

注意

此选项目前以公共预览版提供,可能会更改。 Copilot云代理 必须在存储库中可用。

可以将 Copilot 分配以应用自动修复。 Copilot 分析代码扫描警报,创建修正计划,并在拉取请求中实现必要的代码更改。

  1. 在 GitHub 上,导航到存储库的主页面。
  2. 在存储库名称下,单击 Security and quality 选项卡。如果看不到“ Security and quality”选项卡,请选择 下拉菜单,然后单击 Security and quality
  3. 在左边栏中,单击“ Code scanning”****。
  4. 单击警报的名称。
  5. 如果未生成自动修复,并且Copilot自动修复可以建议修复方案,请在页面顶部单击**生成修复**。
  6. 在右侧菜单中,单击 “分配者”。
  7. 选择“Copilot”。

在 30 秒内,Copilot 将打开一个拉取请求以解决警报,并附上修复措施的摘要以及更改的详细信息。 创建后,拉取请求会显示在“开发”部分中。

手动修复警报

任何对仓库具有写入权限的人都可以通过提交对代码的更正来修复警报。 如果存储库已安排在拉取请求上运行 code scanning,最好提交包含更正内容的拉取请求。 这将触发 code scanning 对更改的分析,并测试你的修补程序不会引入任何新问题。 有关详细信息,请参阅“鉴定拉取请求中的代码扫描警报”。

若要在没有离开 GitHub 的情况下跟踪团队工作流中的修正工作,可以将警报链接到问题。 请参阅“将代码扫描警报链接到 GitHub 议题”。

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

警报只能在一个分支中修复。 你可在警报摘要中使用“分支”筛选器,以检查某个警报是否已在特定分支中修复。

警报视图的屏幕截图,其中展开了分支选项。 “分支”筛选器带有深橙色下划线。

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

注意

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

忽略警报

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

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

当你忽略警报时:

  • 该警报在所有分支中取消显示。
  • 该警报已从项目的当前警报数量中移除。
  • 警报被移动到警报摘要中的“Closed(已关闭)”列表,需要时你可以在其中重新打开它。
  • 已记录关闭警报的原因。
  • (可选)你可以对忽略操作添加评论,以记录忽略警报的背景信息。
  • 下次 code scanning 运行时,相同的代码不会生成警报。

要忽略警报:

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

  2. 在存储库名称下,单击 Security and quality 选项卡。如果看不到“ Security and quality”选项卡,请选择 下拉菜单,然后单击 Security and quality

  3. 在左边栏中,单击“ Code scanning”****。

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

  5. 查看警报,然后单击“忽略警报”**** 并选择或输入关闭警报的原因。

              ![警报检查失败的屏幕截图。 “忽略警报”按钮以深橙色突出显示,且显示忽略下拉菜单。 ](/assets/images/help/repository/code-scanning-alert-dropdown-reason.png)
    

从下拉菜单中选择合适的原因很重要,因为这可能会影响到是否继续将查询纳入未来的分析。 (可选)可对关闭操作进行注释以记录警报关闭操作的上下文。 关闭操作注释将添加到警报时间线,可在审核和报告期间用作理由。 可使用代码扫描 REST API 检索或设置注释。 注释包含在 dismissed_comment 终结点的 alerts/{alert_number} 中。 有关详细信息,请参阅“适用于代码扫描的 REST API 终结点”。

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

一次忽略多个警报

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

重新打开已消除的警报

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

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

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

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

  2. 在存储库名称下,单击 Security and quality 选项卡。如果看不到“ Security and quality”选项卡,请选择 下拉菜单,然后单击 Security and quality

  3. 在左边栏中,单击“ Code scanning”****。

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

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

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

    如果误删了某个配置,单击“取消”**** 以避免应用更改。

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

  7. 删除所有不需要的配置并确认显示了预期的配置后,单击“保存更改”****。

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

注意

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

延伸阅读