关于 代码扫描 中的警报
您可以设置 代码扫描,以使用默认 CodeQL 分析、第三方分析或多种类型的分析来检查仓库中的代码。 分析完成后,生成的警报将并排显示在仓库的安全视图中。 第三方工具或自定义查询的结果可能不包括您在 GitHub 的默认 CodeQL 分析所检测的警报中看到的所有属性。 更多信息请参阅“为仓库设置 代码扫描”。
默认情况下, 代码扫描 定期在默认分支和拉取请求中分析您的代码。 有关管理拉取请求中的警报的更多信息,请参阅“对拉取请求中的 代码扫描 警报分类”。
注: SAIF 上传支持每次上传最多 1000 个结果。 超过此限制的任何结果均被忽略。 如果工具产生太多结果,则应更新配置,以专注于最重要的规则或查询的结果。
关于警报详细信息
每个警报都会高亮显示代码的问题以及识别该问题的工具名称。 您可以看到触发警报的代码行以及警报的属性,例如问题的严重程度和性质。 警报还会告知该问题第一次被引入的时间。 对于由 CodeQL 分析确定的警报,您还会看到如何解决问题的信息。

如果使用 CodeQL 设置 代码扫描,也可以检测代码中的数据流问题。 数据流分析将查找代码中的潜在安全问题,例如:不安全地使用数据、将危险参数传递给函数以及泄漏敏感信息。
当 代码扫描 报告数据流警报时,GitHub 将显示数据在代码中如何移动。 代码扫描 可用于识别泄露敏感信息的代码区域,以及可能成为恶意用户攻击切入点的代码区域。
查看仓库的警报
任何对仓库有读取权限的人都可以查看拉取请求上的 代码扫描 注释。 更多信息请参阅“对拉取请求中的 代码扫描 警报分类”。
您需要写入权限才能在 Security(安全)选项卡上查看仓库所有警报的摘要。 默认情况下,显示默认分支的警报。
-
在 GitHub 上,导航到仓库的主页面。
-
在仓库名称下,单击 Security(安全)。

-
在左侧边栏中,单击 Code scanning alerts(代码扫描警报)。

-
(可选)使用下拉菜单过滤警报。 例如,您可以通过用于识别警报的工具进行过滤。

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

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

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

修复警报
任何对仓库具有写入权限的人都可以通过提交对代码的更正来修复警报。 如果仓库已安排对拉取请求运行 代码扫描,则最好通过拉取请求提交您的更正。 这将触发对更改的 代码扫描 分析,并测试您的修复是否会带来任何新的问题。 更多信息请参阅“配置 代码扫描”和“对拉取请求中的 代码扫描 警报分类”。
如果您有仓库的写入权限,您可以通过查看警报摘要并单击 Closed(已关闭)来查看已修复的警报。 更多信息请参阅“查看仓库的警报”。 “Closed(已关闭)”列表显示已修复的警报和用户已忽略的警报。
警报只能在一个分支中修复。 您可以在警报摘要上使用“Branch(分支)”下拉菜单检查警报是否是在特定分支中修复的。

忽略或删除警报
有两种方法可以关闭警报。 您可以修复代码中的问题,也可以忽略警报。 或者,如果您具有仓库的管理员权限,您可以删除警报。 删除警报适用于以下情况:您设置了 代码扫描 工具,然后决定删除它,或者您配置了 CodeQL 分析,但查询集超出您的需求,于是您从工具中删除了某些查询。 在这两种情况下,删除警报允许您清理 代码扫描 结果。 您可以在 Security(安全)选项卡中从摘要列表删除警报。
忽略警报是关闭您认为不需要修复的警报的一种方式。 例如,仅用于测试的代码中有错误,或者修复错误的工作超过改进代码的潜在益处。 您可以从代码中的 代码扫描 注释忽略警报,或者从 Security(安全)选项卡中的摘要列表忽略警报。
当您忽略警报时:
- 它在所有分支中被忽略。
- 警报将从项目的当前警报数中删除。
- 警报被移动到警报摘要中的“Closed(已关闭)”列表,需要时您可以在其中重新打开它。
- 将记录您关闭警报的原因。
- 代码扫描 下次运行时,相同的代码将不会生成警报。
当您删除警报时:
- 它在所有分支中被删除。
- 警报将从项目的当前警报数中删除。
- 它不会添加到警报摘要中的“Closed(已关闭)”列表。
- 如果生成警报的代码保持不变,并且相同的 代码扫描 工具在不更改任何配置的情况下再次运行,则该警报将再次显示在您的分析结果中。
要忽略或删除警报:
-
在 GitHub 上,导航到仓库的主页面。
-
在仓库名称下,单击 Security(安全)。

-
在左侧边栏中,单击 Code scanning alerts(代码扫描警报)。

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

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

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

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

从下拉菜单中选择合适的原因很重要,因为这可能会影响到是否继续将查询纳入未来的分析。
如果将 CodeQL 警报作为误报予以忽略,例如,因为代码使用不受支持的净化库,则考虑参与 CodeQL 仓库并改进分析。 有关 CodeQL 的更多信息,请参阅“参与 CodeQL”。
一次忽略多个警报
如果项目有多个由于相同原因要忽略的警报,您可以从警报摘要中批量忽略它们。 通常,您需要过滤列表,然后忽略所有匹配的警报。 例如,您可能想要忽略项目中所有已标记为特定通用缺陷枚举 (CWE) 漏洞的当前警报。