Note
网站管理员必须启用 code scanning,然后你才能使用此功能。 有关详细信息,请参阅“为设备配置代码扫描”。
如果企业所有者在企业级别设置了 GitHub Advanced Security (GHAS) 策略,则你可能无法启用或禁用 code scanning。 有关详细信息,请参阅“强制实施企业的代码安全性和分析策略”。
CodeQL 是 GitHub 开发的代码分析引擎,用于自动执行安全检查。 可使用 CodeQL 分析代码,并将结果显示为 code scanning 警报。
对 code scanning 使用 CodeQL 分析有三种主要方法:
-
使用默认设置在存储库上快速配置对 code scanning 的 CodeQL 分析。 默认设置自动选择要分析的语言、要运行的查询套件和触发扫描的事件。 如果需要,可以手动选择要运行的查询套件和要分析的语言。 启用 CodeQL 后,GitHub Actions 将执行工作流运行以扫描代码。 有关详细信息,请参阅“配置代码扫描的默认设置”。
-
使用高级设置将 CodeQL 工作流添加到存储库。 这会生成一个可自定义的工作流文件,该文件使用 github/codeql-action 运行 CodeQL CLI。 有关详细信息,请参阅“配置代码扫描的高级设置”。
-
直接在外部 CI 系统中运行 CodeQL CLI 并将结果上传到 GitHub。 有关详细信息,请参阅“在现有 CI 系统上使用代码扫描”。
Note
在 GitHub Enterprise Server 3.10 上, CodeQL 操作默认使用 CodeQL CLI 版本 2.13.5。 如果在外部 CI 系统中运行分析,建议使用 CodeQL CLI 的相同版本。
有关 code scanning 警报的信息,请参阅“关于代码扫描警报”。
关于 CodeQL
CodeQL 是一种将代码视为数据的编程语言和关联的工具。 它的创建是为了使分析代码更容易,并比传统静态分析器更有信心地发现代码中的潜在漏洞。
- 生成 CodeQL 数据库来代表您的代码库。
- 然后,对该数据库运行 CodeQL 查询,以确定代码库中的问题。
- 将 CodeQL 与 code scanning一起使用时,查询结果在 GitHub Enterprise Server 中显示为 code scanning 警报。
CodeQL 支持编译的语言和解释的语言,并且可以在使用支持的语言编写的代码中发现漏洞和错误。
- C/C++
- C#
- Go
- Java/Kotlin
- JavaScript/TypeScript
- Python
- Ruby
- Swift
Note
- 使用
java
分析用 Java、Kotlin 或两者共同编写的代码。 - 使用
javascript
分析用 JavaScript、TypeScript 或两者共同编写的代码。
有关详细信息,请参阅 CodeQL 网站上的文档:“支持的语言和框架”。
CodeQL 查询
GitHub 专家、安全研究人员和社区贡献者编写和维护用于 code scanning 的默认 CodeQL 查询。 查询会定期更新以改进分析,并减少任何误报结果。 默认和扩展包中可用查询的详细信息,请参阅默认和安全扩展查询套件中包含的查询。
编写自己的查询
这些查询是开源查询,因此可以在 github/codeql 存储库中查看它们并向其贡献内容。 有关详细信息,请参阅 CodeQL 文档中的关于 CodeQL 查询。
运行额外查询
如果使用高级设置或外部 CI 系统扫描代码,则可以在分析过程中运行其他查询。
这些查询必须属于已发布的 CodeQL 查询包或存储库中的 CodeQL 包。
-
当 CodeQL 查询包发布到 GitHub Container registry 时,查询所需的所有可传递依赖项和编译缓存都包含在包中。 这可以提高性能,并确保在包中运行查询每次都会提供相同的结果,直到升级到新版本的包或 CLI。
-
可以通过多个 GitHub 容器注册表下载 CodeQL 查询包。 有关详细信息,请参阅“自定义代码扫描的高级设置”。
有关详细信息,请参阅“使用 CodeQL 包自定义分析”。