关于 SARIF 结果的 code scanning 限制
# SARIF results exceed soft limits
Locations for an alert exceeded limits
Analysis SARIF file exceeded alert limits
Rule tags in SARIF file exceed limits
Alert in SARIF upload exceeded thread flow location limits
Repository is at risk of exceeding the alert limit.
# SARIF results exceed hard limit
Alert(s) in SARIF file exceeded thread flow location limits
Analysis SARIF file rejected due to extension limits
Analysis SARIF file rejected due to location limit
Analysis SARIF file rejected due to rule tag limits
Analysis SARIF file rejected due to result limits
Analysis SARIF file rejected due to rule limits
Analysis SARIF file rejected due to run limits
All analysis uploads blocked due to alert limit
Code scanning 设置 SARIF 结果文件中字段的两种类型的限制。
- 软性限制,用于确定向用户存储和显示的数据量。
- 硬性限制,用于确定接受处理的最大数据量。
可以看到这些错误出现在由 CodeQL 生成的 SARIF 文件或由第三方分析工具生成的 SARIF 文件中。
| SARIF 数据 | 最大值 | 数据截断限制 |
|---|---|---|
| 每个文件的运行次数 | 20 | 无 |
| 每次运行的结果数 | 25,000 | 只包括前 5,000 条结果,并按严重性确定优先级。 |
| 每次运行的规则数 | 25,000 | 无 |
| 每次运行的工具扩展数 | 100 | 无 |
| 每个结果的线程流位置数 | 10,000 | 只包括前 1,000 个线程流位置,按优先级排序。 |
| 每个结果的位置数 | 1,000 | 只包括 100 个位置。 |
| 每个规则的标记数 | 20 | 只包括 10 个标记。 |
| 警报限制 | 1,000,000 | 无 |
有关验证 SARIF 文件的信息,请参阅 对代码扫描的 SARIF 支持。
修复软性限制错误
超过软限制时, code scanning 会显示最高优先级信息。 通常,您无需对 code scanning 配置进行任何更改。 随着团队修复警报,每次运行中报告的结果数将减少,直到它们处于软性限制范围内并显示所有结果为止。 或者,可以使用针对硬性限制错误描述的方法。
修复“由于结果限制而拒绝分析 SARIF 文件”
减少 SARIF 结果文件中包含的结果数有许多注意事项和可能的解决方案。 有关指导,请参阅“SARIF 结果文件太大”。
修复“SARIF 文件中的警报超出了线程流位置限制”
可以将分析配置为限制结果中包含的数据流路径数。 默认情况下,每个结果包含 4 个数据流路径。
-
CodeQL code scanning 的高级设置:更新
analyze步骤,将路径数量限制为最多一个或零个。- name: Perform CodeQL Analysis uses: github/codeql-action/analyze@v4 env: CODEQL_ACTION_EXTRA_OPTIONS: '{"database":{"interpret-results":["--max-paths", 1]}}' -
CodeQL CLI
database analyze:更新数据库分析命令以包含--max-paths=1标志。 有关详细信息,请参阅“数据库分析”。
注意
max-paths 设置会影响所有数据流查询的结果。
修复“由于运行限制而拒绝分析 SARIF 文件”
最简单的方法是为每个运行生成新的 SARIF 文件,并单独上传每个文件。 向每个结果添加一个“类别”,这样 code scanning 就可以相应地存储和显示结果。 有关详细信息,请参阅“将 SARIF 文件上传到 GitHub”。
修复“由于规则限制而拒绝分析 SARIF 文件”
这里有两种可能的方法。
- 减少用于分析代码的规则数。 有关详细信息,请参阅“SARIF 结果文件过大”中的定义要运行的查询套件和从分析中排除查询。
- 运行分析两次,每次使用一组不同的规则,并将这两个结果文件上传到code scanning。 有关详细信息,请参阅“将 SARIF 文件上传到 GitHub”。
修复“由于扩展限制而拒绝分析 SARIF 文件”
最简单的方法是每次运行该工具时创建一个单独的 SARIF 文件,并单独上传每个文件。 可能还需要联系该工具的维护人员。 有关详细信息,请参阅“将 SARIF 文件上传到 GitHub”。
CodeQL 分析不应生成此错误。 如果在使用 CodeQL 操作或 CodeQL CLI 时看到此错误,您应该联系 GitHub 支持 以告知我们。 有关详细信息,请参阅“联系 GitHub 支持团队”。
修复“由于位置限制而拒绝分析 SARIF 文件”
解决此问题的最佳方法通常是识别报告过多位置的查询,并将其从分析中排除。 有关如何执行此操作的信息,请参阅 SARIF 结果文件太大。
修复“由于规则标记限制而拒绝分析 SARIF 文件”
需要更新 SARIF 文件或生成器,以便为每个 reportingDescriptor 对象报告的标记数组少于 10。 有关详细信息,请参阅“properties.tags[]”中的 。
修复“存储库有超出警报限制的风险”和“由于警报限制,所有分析上传均被阻止”
此限制是由于存储库生成了比正常 code scanning 配置中通常应存在的更多独特警报而被触发的。 这可能是由于使用了第三方工具的输出,而非用户配置错误。 用户配置错误和工具供应商错误都可能是原因。
有几个步骤可以解决此问题。
- 查看您正在生成的 SARIF 文件,识别在多次运行工具过程中将 code scanning 警报归类为不同警报的原因。 通常这是由以下原因之一导致的:
- 由于包含临时目录或生成的文件名,SARIF
artifactLocation.uri属性(警报用户界面中的 code scanning filepath)不可确定。 - 所使用的工具产生不稳定的 SARIF 规则名称或
artifactLocation object uri property值,这通常是由于使用哈希值(例如来自 git 提交或 docker 镜像 SHA)或其他在多次运行或不同环境中会变化的数据来源。
- 由于包含临时目录或生成的文件名,SARIF
- 确定问题根源后,应相应更新配置,如果工具是不稳定 SARIF 结果的来源,请联系工具供应商。
- 停止为任何产生非确定性输出的第三方工具上传代码扫描结果,直到工具供应商修复该问题。
“由于警报限制,所有分析上传均被阻止”的额外步骤
除了修复代码扫描配置以及删除或修复第三方工具的输出外,还需要联系 以帮助删除任何有问题的配置的警报。
目前没有自助删除警报的方法,因此在重新启用代码扫描之前,必须联系客户支持。