跳至主要内容

关于使用 CodeQL 进行代码扫描

您可以使用 CodeQL 来识别代码中的漏洞和错误。结果会以代码扫描警报的形式显示在 GitHub 上。

谁可以使用此功能?

以下仓库类型可使用代码扫描

  • GitHub.com 上的公共仓库
  • 在 GitHub Team、GitHub Enterprise Cloud 或 GitHub Enterprise Server 上的组织拥有的仓库,已启用 GitHub 代码安全

CodeQL 是 GitHub 开发的代码分析引擎,用于自动化安全检查。您可以使用 CodeQL 分析代码,并将结果显示为代码扫描警报。

使用 CodeQL 分析进行代码扫描的主要方式有三种

  • 使用默认设置可快速在仓库上配置 CodeQL 分析进行代码扫描。默认设置会自动选择要分析的语言、要运行的查询套件以及触发扫描的事件。如果您愿意,也可以手动选择要运行的查询套件和要分析的语言。启用 CodeQL 后,GitHub Actions 将执行工作流运行来扫描您的代码。更多信息,请参阅 配置代码扫描的默认设置

  • 使用高级设置将 CodeQL 工作流添加到您的仓库。这会生成一个可自定义的工作流文件,该文件使用 github/codeql-action 来运行 CodeQL CLI。更多信息,请参阅 配置高级设置以进行代码扫描

  • 在外部 CI 系统中直接运行 CodeQL CLI 并将结果上传到 GitHub。更多信息,请参阅 在现有 CI 系统中使用代码扫描

有关代码扫描警报的信息,请参阅 关于代码扫描警报

关于 CodeQL

CodeQL 是一种编程语言及其配套工具,它将代码视作数据。它专门被创建用来更容易地分析代码,并且相较于传统的静态分析器,能够更有把握地发现代码中的潜在漏洞。

  1. 您会生成一个 CodeQL 数据库来表示您的代码库。
  2. 然后在该数据库上运行 CodeQL 查询,以识别代码库中的问题。
  3. 当您将 CodeQL 与代码扫描一起使用时,查询结果会以代码扫描警报的形式显示在 GitHub 上。

CodeQL 支持编译型和解释型语言,并能够在受支持语言编写的代码中发现漏洞和错误。

CodeQL 支持以下语言

  • C/C++
  • C#
  • Go
  • Java/Kotlin
  • JavaScript/TypeScript
  • Python
  • Ruby
  • Rust
  • Swift
  • GitHub Actions 工作流

注意

  • 使用 java-kotlin 来分析用 Java、Kotlin 或两者编写的代码。
  • 使用 javascript-typescript 来分析用 JavaScript、TypeScript 或两者编写的代码。

更多信息,请参阅 CodeQL 官方网站的文档:受支持的语言和框架

重要提示

CodeQL 支持上述列表之外的语言。这包括但不限于 PHPScala 等。尝试在不受支持的语言上使用 CodeQL 可能导致未生成警报且分析不完整。

建模自定义或小众框架

GitHub 专家、安全研究员和社区贡献者编写库,以模型化流行框架和库中的数据流。如果您使用的自定义依赖项未被模型化,您可以使用 Visual Studio Code 的 CodeQL 扩展为这些依赖项创建模型,并将其用于扩展分析。更多信息,请参阅 使用 CodeQL 模型编辑器

CodeQL 查询

GitHub 专家、安全研究员和社区贡献者编写并维护用于代码扫描的默认 CodeQL 查询。这些查询会定期更新,以改进分析并降低误报率。

编写您自己的查询

这些查询是开源的,您可以在 github/codeql 仓库中查看并贡献查询。更多信息,请参阅 CodeQL 文档中的 关于 CodeQL 查询

运行额外查询

如果您使用高级设置或外部 CI 系统扫描代码,您可以在分析过程中运行额外的查询。

这些查询必须属于已发布的 CodeQL 查询包,或位于某个仓库中的 CodeQL 包。

  • 当 CodeQL 查询包发布到 GitHub Container Registry 时,所有查询所需的传递性依赖以及编译缓存都会包含在包内。这提升了性能,并确保在您升级到新版本的包或 CLI 之前,每次运行该包中的查询都能得到相同的结果。

  • CodeQL 查询包可以从多个 GitHub Container Registry 下载。更多信息,请参阅 代码扫描的工作流配置选项

更多信息,请参阅 使用 CodeQL 包自定义分析

© . This site is unofficial and not affiliated with GitHub, Inc.