跳至主要内容

关于使用 CodeQL 进行代码扫描

您可以使用 CodeQL 识别代码中的漏洞和错误。结果将显示为 GitHub 中的代码扫描警报。

谁可以使用此功能?

代码扫描适用于以下存储库类型

  • GitHub.com 上的公共存储库。
  • 启用了GitHub 高级安全的 GitHub Enterprise Cloud 上的组织拥有的存储库。

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 支持编译型和解释型语言,并且可以查找用支持的语言编写的代码中的漏洞和错误。

  • C/C++
  • C#
  • Go
  • Java/Kotlin
  • JavaScript/TypeScript
  • Python
  • Ruby
  • Swift

注意

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

有关更多信息,请参阅 CodeQL 网站上的文档:“支持的语言和框架”。

建模自定义或利基框架

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

CodeQL 查询

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

编写您自己的查询

这些查询是开源的,因此您可以在github/codeql存储库中查看和贡献查询。有关更多信息,请参阅 CodeQL 文档中的“关于 CodeQL 查询”。

运行其他查询

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

这些查询必须属于已发布的 CodeQL 查询包或存储库中的 CodeQL 包。

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

  • CodeQL 查询包可以从多个 GitHub 容器注册表下载。有关更多信息,请参阅“自定义代码扫描的高级设置”。

有关更多信息,请参阅“使用 CodeQL 包自定义分析”。