Skip to main content
We publish frequent updates to our documentation, and translation of this page may still be in progress. For the most current information, please visit the English documentation.

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

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

Who can use this feature

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

Code scanning 可用于 GitHub Enterprise Server 中的组织拥有的存储库。 此功能需要 GitHub Advanced Security 的许可证。 有关详细信息,请参阅“关于 GitHub Advanced Security”。

查看仓库的警报

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

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

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

  1. 在 your GitHub Enterprise Server instance 上,导航到存储库的主页。 1. 在存储库名称下,单击“ 安全性”。 “安全”选项卡 1. 在左侧边栏中,单击“代码扫描警报”。 “代码扫描警报”选项卡

  2. (可选)使用自由文本搜索框或下拉菜单来筛选警报。 例如,您可以通过用于识别警报的工具进行过滤。 按工具筛选 1. 在 "Code scanning" 下,单击要探索的警报。 警报摘要

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

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

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

有关详细信息,请参阅“关于 code scanning 警报”。

注意:对于 CodeQL 的 code scanning 分析,你可以在存储库的 code scanning 警报列表顶部的标头中看到有关最新运行的信息。

例如,您可以看到上次扫描运行的时间,所分析的代码行数与您仓库中的代码行总数的比较, 以及生成的警报总数。 UI 横幅

筛选 code scanning 警报

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

  • 要使用预定义的筛选器,请单击“筛选器”或警报列表标题中显示的筛选器,然后从下拉列表中选择一个筛选器。 预定义的筛选器
  • 要使用关键字,请直接在筛选器文本框中键入,或者:
    1. 在筛选器文本框中单击以显示所有可用筛选器关键字的列表。
    2. 单击要使用的关键字,然后从下拉列表中选择值。 关键字筛选器列表

使用关键字筛选器的好处是,下拉列表中仅显示带有结果的值。 这样可以很容易地避免设置没有结果的筛选器。

如果输入多个筛选器,视图将显示与所有这些筛选器匹配的警报。 例如,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 Server 可执行以下自由文本搜索:

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

提示:

  • 多字词搜索等同于 OR 搜索。
  • AND 搜索将返回以任何顺序在警报名称或详细信息中的“任意位置”找到搜索词的结果。
  1. 在 your GitHub Enterprise Server instance 上,导航到存储库的主页。 1. 在存储库名称下,单击“ 安全性”。 “安全”选项卡 1. 在左侧边栏中,单击“代码扫描警报”。 “代码扫描警报”选项卡
  2. 在“筛选器”下拉菜单右侧,在自由文本搜索框中键入关键字以进行搜索。 自由文本搜索框
  3. return。 警报列表将包含与搜索条件匹配的未处理 code scanning 警报。

修复警报

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

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

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

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

按分支过滤警报

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

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

## 关闭或删除警报

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

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

当您忽略警报时:

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

删除警报时:

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

若要关闭或删除警报:

  1. 在 your GitHub Enterprise Server instance 上,导航到存储库的主页。 1. 在存储库名称下,单击“ 安全性”。 “安全”选项卡 1. 在左侧边栏中,单击“代码扫描警报”。 “代码扫描警报”选项卡

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

    删除警报

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

    按规则筛选警报

  3. 如果要忽略警报,请务必先了解警报,以便选择正确的忽略原因。 单击要了解的警报。 从摘要列表中打开警报

  4. 查看警报,然后单击“取消显示”并选择取消显示警报的原因。 选择消除警报的原因 从下拉菜单中选择合适的原因很重要,因为这可能会影响到是否继续将查询纳入未来的分析。

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

一次忽略多个警报

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

延伸阅读