管理仓库的代码扫描警报

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

If you have write permission to a repository you can manage 代码扫描 alerts for that repository.

代码扫描 适用于启用了 GitHub Advanced Security 的组织拥有的仓库。 更多信息请参阅“关于 GitHub Advanced Security”。

关于 代码扫描 中的警报

您可以设置 代码扫描,以使用默认 CodeQL 分析、第三方分析或多种类型的分析来检查仓库中的代码。 分析完成后,生成的警报将并排显示在仓库的安全视图中。 第三方工具或自定义查询的结果可能不包括您在 GitHub 的默认 CodeQL 分析所检测的警报中看到的所有属性。 更多信息请参阅“为仓库设置 代码扫描”。

默认情况下, 代码扫描 定期在默认分支和拉取请求中分析您的代码。 有关管理拉取请求中的警报的更多信息,请参阅“对拉取请求中的 代码扫描 警报分类”。

注意:

  • SARIF upload supports a maximum of 5000 results per upload. 超过此限制的任何结果均被忽略。 如果工具产生太多结果,则应更新配置,以专注于最重要的规则或查询的结果。

  • For each upload, SARIF upload supports a maximum size of 10 MB for the gzip-compressed SARIF file. Any uploads over this limit will be rejected. If your SARIF file is too large because it contains too many results, you should update the configuration to focus on results for the most important rules or queries.

关于警报详细信息

每个警报都会高亮显示代码的问题以及识别该问题的工具名称。 You can see the line of code that triggered the alert, as well as properties of the alert, such as the severity, security severity, and the nature of the problem. 警报还会告知该问题第一次被引入的时间。 对于由 CodeQL 分析确定的警报,您还会看到如何解决问题的信息。

来自 代码扫描 的警报示例

如果使用 CodeQL 设置 代码扫描,也可以检测代码中的数据流问题。 数据流分析将查找代码中的潜在安全问题,例如:不安全地使用数据、将危险参数传递给函数以及泄漏敏感信息。

当 代码扫描 报告数据流警报时,GitHub 将显示数据在代码中如何移动。 代码扫描 可用于识别泄露敏感信息的代码区域,以及可能成为恶意用户攻击切入点的代码区域。

About severity levels

Alert severity levels may be Error, Warning, or Note.

By default, any code scanning results with a severity of error will cause check failure. You can specify the severity level at which pull requests that trigger code scanning alerts should fail. For more information, see "Defining the severities causing pull request check failure."

About security severity levels

代码扫描 displays security severity levels for alerts that are generated by security queries. Security severity levels can be Critical, High, Medium, or Low.

To calculate the security severity of an alert, we use Common Vulnerability Scoring System (CVSS) data. CVSS is an open framework for communicating the characteristics and severity of software vulnerabilities, and is commonly used by other security products to score alerts. For more information about how severity levels are calculated, see the blog post.

By default, any code scanning results with a security severity of Critical or High will cause a check failure. You can specify which security severity level for code scanning results should cause a check failure. For more information, see "Defining the severities causing pull request check failure."

查看仓库的警报

任何对仓库有读取权限的人都可以查看拉取请求上的 代码扫描 注释。 更多信息请参阅“对拉取请求中的 代码扫描 警报分类”。

您需要写入权限才能在 Security(安全)选项卡上查看仓库所有警报的摘要。

By default, the code scanning alerts page is filtered to show alerts for the default branch of the repository only.

  1. 在 GitHub Enterprise Server 上,导航到仓库的主页面。

  2. 在仓库名称下,单击 Security(安全)Security 选项卡

  3. 在左侧边栏中,单击 Code scanning alerts(代码扫描警报)"Code scanning alerts(代码扫描警报)" 选项卡

  4. Optionally, use the free text search box or the drop-down menus to filter alerts. 例如,您可以通过用于识别警报的工具进行过滤。 Filter by tool

  5. 在 "代码扫描" 下,单击要探索的警报。

    警报摘要

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

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

注意: 对于 CodeQL 的 代码扫描 分析,您可以在仓库的 代码扫描 警报列表顶部的标头中看到有关最新运行的信息。

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

Filtering 代码扫描 alerts

You can filter the alerts shown in the 代码扫描 alerts view. This is useful if there are many alerts as you can focus on a particular type of alert. There are some predefined filters and a range of keywords that you can use to refine the list of alerts displayed.

  • To use a predefined filter, click Filters, or a filter shown in the header of the list of alerts, and choose a filter from the drop-down list. Predefined filters
  • To use a keyword, either type directly in the filters text box, or:
    1. Click in the filters text box to show a list of all available filter keywords.
    2. Click the keyword you want to use and then choose a value from the drop-down list. Keyword filters list

The benefit of using keyword filters is that only values with results are shown in the drop-down lists. This makes it easy to avoid setting filters that find no results.

If you enter multiple filters, the view will show alerts matching all these filters. For example, is:closed severity:high branch:main will only display closed high-severity alerts that are present on the main branch. The exception is filters relating to refs (ref, branch and pr): is:open branch:main branch:next will show you open alerts from both the main branch and the next branch.

Restricting results to application code only

You can use the "Only alerts in application code" filter or autofilter:true keyword and value to restrict results to alerts in application code. Application code excludes the following.

  • Code generated by the build process
  • Test code
  • Library or third-party code
  • 文档

代码扫描 categorizes files by file path. At this time, you cannot manually categorize source files.

搜索 代码扫描 警报

您可以搜索警报列表。 如果仓库中存在大量警报,或者您不知道警报的确切名称,这很有用。 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. 在 GitHub Enterprise Server 上,导航到仓库的主页面。
  2. 在仓库名称下,单击 Security(安全)Security 选项卡
  3. 在左侧边栏中,单击 Code scanning alerts(代码扫描警报)"Code scanning alerts(代码扫描警报)" 选项卡
  4. Filters(过滤器)下拉菜单的右边,在自由文本搜索框中输入关键词以搜索。 自由文本搜索框
  5. return。 警报列表将包含与搜索条件匹配的未处理 代码扫描 警报。

修复警报

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

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

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

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

按分支过滤警报

忽略或删除警报

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

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

当您忽略警报时:

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

当您删除警报时:

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

要忽略或删除警报:

  1. 在 GitHub Enterprise Server 上,导航到仓库的主页面。

  2. 在仓库名称下,单击 Security(安全)Security 选项卡

  3. 在左侧边栏中,单击 Code scanning alerts(代码扫描警报)"Code scanning alerts(代码扫描警报)" 选项卡

  4. 如果您拥有仓库管理员权限,想要删除此 代码扫描 工具的警报,请选中部分或全部复选框,然后单击 Delete(删除)

    删除警报

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

    按规则过滤警报

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

    从摘要列表中打开警报

  6. 查看警报,然后单击 Dismiss(忽略)并选择关闭警报的原因。 选择忽略警报的原因

    从下拉菜单中选择合适的原因很重要,因为这可能会影响到是否继续将查询纳入未来的分析。

    如果将 CodeQL 警报作为误报予以忽略,例如,因为代码使用不受支持的净化库,则考虑参与 CodeQL 仓库并改进分析。 有关 CodeQL 的更多信息,请参阅“参与 CodeQL”。

一次忽略多个警报

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

延伸阅读

此文档对您有帮助吗?

隐私政策

帮助我们创建出色的文档!

所有 GitHub 文档都是开源的。看到错误或不清楚的内容了吗?提交拉取请求。

做出贡献

或, 了解如何参与。