跳至主要内容

解决代码扫描警报

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

谁可以使用此功能?

拥有写入权限的用户

为代码扫描警报生成建议的修复

GitHub Copilot Autofix 可以为代码扫描分析识别的警报生成修复方案。大多数 CodeQL 警报类型以及一些来自第三方工具的警报都受支持。有关更多信息,请参阅“负责任地使用 Copilot Autofix 进行代码扫描”。

注意

您无需订阅 GitHub Copilot 即可使用 GitHub Copilot Autofix。Copilot Autofix 可用于 GitHub.com 上的所有公共代码库,以及拥有 GitHub 高级安全许可证的 GitHub Enterprise Cloud 企业中的私有代码库。

  1. 在 GitHub 上,导航到代码库的主页。
  2. 在代码库名称下,单击 安全。如果您看不到“安全”选项卡,请选择下拉菜单,然后单击安全
    Screenshot of a repository header showing the tabs. The "Security" tab is highlighted by a dark orange outline.
  3. 在左侧边栏中,单击 代码扫描.
  4. 单击警报的名称。
  5. 如果 Copilot Autofix 可以建议修复方案,请在页面顶部单击 生成修复方案
  6. 生成建议的修复后,您可以在页面底部点击使用修复创建 PR,自动生成包含建议修复的拉取请求。系统会从默认分支创建新分支,提交生成的修复,并创建一个草稿拉取请求。您可以像处理任何其他修复一样测试和编辑建议的修复。

有关自动生成的修复的限制信息,请参阅“建议的限制

手动修复警报

任何拥有代码库写入权限的用户都可以通过将对代码的更正提交到代码库来修复警报。如果代码库已安排在拉取请求上运行代码扫描,最好使用您的更正创建一个拉取请求。这将触发对更改的代码扫描分析,并测试您的修复不会引入任何新问题。更多信息,请参阅“在拉取请求中分类代码扫描警报”。

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

警报可能在一个分支中已修复,但在另一个分支中未修复。您可以使用警报摘要中的“分支”过滤器检查警报是否在特定分支中已修复。

Screenshot of alerts view with the "Branch" dropdown menu expanded. The "Branch" button is outlined in dark orange.

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

注意

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

忽略警报

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

忽略警报是一种关闭您认为不需要修复的警报的方法。例如,仅用于测试的代码中的错误,或者修复错误的工作量大于改进代码的潜在好处时。您可以从代码中的代码扫描注释或安全选项卡内的摘要列表中忽略警报。

忽略警报时

  • 它会在所有分支中被忽略。
  • 警报将从项目的当前警报数量中移除。
  • 警报将移动到警报摘要中的“已关闭”列表,如果需要,您可以从那里重新打开它。
  • 记录您关闭警报的原因。
  • 您可以选择对忽略操作添加评论,以记录警报忽略的上下文。
  • 下次运行代码扫描时,相同的代码不会生成警报。

忽略警报

  1. 在 GitHub 上,导航到代码库的主页。

  2. 在代码库名称下,单击 安全。如果您看不到“安全”选项卡,请选择下拉菜单,然后单击安全

    Screenshot of a repository header showing the tabs. The "Security" tab is highlighted by a dark orange outline.

  3. 在左侧边栏中,单击 代码扫描.

  4. 如果您要忽略警报,请务必先检查警报,以便您可以选择正确的忽略原因。点击您要检查的警报。

  5. 查看警报,然后点击忽略警报并选择或键入关闭警报的原因。

    Screenshot of an alert check failure. The "Dismiss alert" button is highlighted in dark orange and the dismiss drop-down displayed.
    务必从下拉菜单中选择适当的原因,因为这可能会影响查询是否继续包含在未来的分析中。您可以选择对忽略操作添加评论,以记录警报忽略的上下文。忽略评论会添加到警报时间线,并可在审计和报告期间用作理由。您可以使用代码扫描 REST API 检索或设置注释。注释包含在alerts/{alert_number} 端点的dismissed_comment 中。更多信息,请参阅“代码扫描的 REST API 端点”。

    如果您将 CodeQL 警报忽略为误报结果(例如,因为代码使用了不受支持的消毒库),请考虑为 CodeQL 代码库贡献代码并改进分析。有关 CodeQL 的更多信息,请参阅“为 CodeQL 贡献代码”。

一次忽略多个警报

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

重新打开已忽略的警报

如果您忽略了警报,但后来意识到您需要修复警报,您可以重新打开它并修复代码中的问题。显示已关闭警报的列表,找到警报,显示它,然后重新打开它。然后,您可以像处理任何其他警报一样修复此警报。

从分支中删除陈旧的配置和警报

您可能在一个代码库上有多个代码扫描配置。运行时,多个配置可以生成相同的警报。此外,如果这些配置按不同的计划运行,则对于不频繁或陈旧的配置,警报状态可能会过时。有关来自多个配置的警报的更多信息,请参阅“关于代码扫描警报”。

  1. 在 GitHub 上,导航到代码库的主页。

  2. 在代码库名称下,单击 安全。如果您看不到“安全”选项卡,请选择下拉菜单,然后单击安全

    Screenshot of a repository header showing the tabs. The "Security" tab is highlighted by a dark orange outline.

  3. 在左侧边栏中,单击 代码扫描.

  4. 在“代码扫描”下,点击代码扫描警报。

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

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

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

    Screenshot of the "Configurations analyzing" modal. The "Delete configuration" icon is outlined in dark orange.

  7. 删除所有不需要的配置并确认显示预期的配置后,点击保存更改

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

注意

  • 如果您删除了代码库默认分支的所有代码扫描配置,则默认分支将保留在“受影响的分支”侧边栏中,但不会被任何配置分析。
  • 如果您删除了代码库默认分支以外的任何分支的所有代码扫描配置,则该分支将从“受影响的分支”侧边栏中删除。

进一步阅读