Skip to main content

GitHub AE 目前处于受限版。

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

从安全视图中,针对项目代码中的潜在漏洞或错误,可查看、修复、关闭或删除警报。

谁可以使用此功能

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

Code scanning 可用于 GitHub AE 中的组织拥有的存储库。 这是一个 GitHub Advanced Security 功能(在 beta 版本期间免费)。 有关详细信息,请参阅“关于 GitHub 高级安全性”。

查看仓库的警报

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

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

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

  1. 在 你的企业 上,导航到存储库的主页。

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

  3. 在左侧边栏中,单击“代码扫描警报”。

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

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

  6. (可选)如果警报突出显示数据流的问题,请单击“显示路径”以显示从数据源到使用它的接收者的路径。 code scanning 警报的屏幕截图。 “显示路径”链接以深橙色轮廓突出显示。 还突出显示了下一步中所述的“显示更多”链接。

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

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

注意:对于 CodeQL 的 code scanning 分析,你可以在存储库的 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 的警报摘要中的“未解决”列表中显示的警报已在默认分支上修复,该警报可能会在警报页上显示“已修复”状态。 可在警报页右侧的“受影响的分支”部分查看筛选的分支的警报状态。

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

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

修复警报

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

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

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

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

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

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

注意: 如果使用多个配置运行 code scanning,则有时警报会有多个分析源。 除非定期运行所有配置,否则可能会看到在一个分析源中已修复但在另一个分析源中未修复的警报。 有关详细信息,请参阅“关于代码扫描警报”。

关闭或删除警报

有两种方法可以关闭警报。 您可以修复代码中的问题,也可以忽略警报。 或者,如果你拥有存储库的管理员权限,则可删除警报。 删除警报适用于以下情况:您设置了 code scanning 工具,然后决定删除它,或者您配置了 CodeQL 分析,但查询集超出您的需求,于是您从工具中删除了某些查询。 在这两种情况下,删除警报允许您清理 code scanning 结果。 可以从“安全性”选项卡中的摘要列表中删除警报。

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

当您忽略警报时:

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

删除警报时:

  • 它在所有分支中被删除。
  • 警报将从项目的当前警报数中删除。
  • 它不会添加到警报摘要中的“已关闭”列表。
  • 如果生成警报的代码保持不变,并且相同的 code scanning 工具在不更改任何配置的情况下再次运行,则该警报将再次显示在你的分析结果中。

若要关闭或删除警报:

  1. 在 你的企业 上,导航到存储库的主页。

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

  3. 在左侧边栏中,单击“代码扫描警报”。

  4. 如果你拥有存储库管理员权限,并且想要删除此 code scanning 工具的警报,请选中部分或全部复选框,然后单击“删除”。

    (可选)可使用自由文本搜索或筛选器显示警报子集,然后一次删除所有匹配的警报。 例如,如果您从 CodeQL 分析中删除了查询,您可以使用“Rule(规则)”过滤器仅列出该查询的警报,然后选择并删除所有这些警报。

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

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

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

一次忽略多个警报

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

重新打开已消除的警报

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

审核对 code scanning 警报的响应

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

延伸阅读