github/codeql-action
GitHub: github/codeql-action
GitHub 官方提供的 Action,用于在 CI/CD 工作流中自动运行 CodeQL 语义代码分析,检测安全漏洞并将结果展示在 GitHub 安全选项卡中。
Stars: 1517 | Forks: 453
# CodeQL Action
此操作运行 GitHub 业界领先的语义代码分析引擎 [CodeQL](https://codeql.github.com/),对仓库的源代码进行分析以查找安全漏洞。然后它会自动将结果上传到 GitHub,以便在拉取请求和仓库的安全选项卡中显示。CodeQL 运行可扩展的[查询](https://github.com/github/codeql)集,这些查询由社区和 [GitHub Security Lab](https://securitylab.github.com/) 开发,用于查找代码中常见的安全漏洞。
有关最近的更改列表,请参阅 CodeQL Action 的[更新日志](CHANGELOG.md)。
## 许可证
本项目在 [MIT 许可证](LICENSE) 下发布。
此操作中使用的底层 CodeQL CLI 在 [GitHub CodeQL 条款与条件](https://securitylab.github.com/tools/codeql/license) 下授权。因此,此操作可用于在 GitHub 上托管的开源项目,以及由启用了 GitHub Advanced Security 的组织拥有的私有仓库。
## 用法
我们建议使用默认设置来为您的仓库配置 CodeQL 分析。有关更多信息,请参阅“[配置代码扫描的默认设置](https://docs.github.com/en/code-security/code-scanning/enabling-code-scanning/configuring-default-setup-for-code-scanning)”。
您还可以为仓库配置高级设置,以使用高度可定制的代码扫描配置来查找代码中的安全漏洞。有关更多信息,请参阅“[配置代码扫描的高级设置](https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/configuring-advanced-setup-for-code-scanning)”和“[自定义代码扫描的高级设置](https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/customizing-your-advanced-setup-for-code-scanning)”。
### 操作
此仓库包含多个操作,使您能够使用 CodeQL 分析仓库中的代码并将分析结果上传到 GitHub 代码扫描。此仓库中的操作还允许您将任何生成 SARIF 的 SAST 工具生成的分析结果上传到 GitHub。
用于 CodeQL 分析的操作:
- `init`:为分析设置 CodeQL。有关输入参数的信息,请参阅 [init 操作定义](https://github.com/github/codeql-action/blob/main/init/action.yml)。
- `analyze`:完成 CodeQL 数据库,运行分析,并将结果上传到代码扫描。有关输入参数的信息,请参阅 [analyze 操作定义](https://github.com/github/codeql-action/blob/main/analyze/action.yml)。
用于上传由第三方工具生成的分析结果的操作:
- `upload-sarif`:将 SARIF 文件上传到代码扫描。如果您正在使用 `analyze` 操作,则没有理由再使用此操作。有关输入参数的信息,请参阅 [upload-sarif 操作定义](https://github.com/github/codeql-action/blob/main/upload-sarif/action.yml)。
具有特殊用途且不太可能被直接使用的操作:
- `autobuild`:尝试自动构建代码。仅用于分析需要构建的语言。请改用 `init` 操作中的 `build-mode: autobuild` 输入。有关输入参数的信息,请参阅 [autobuild 操作定义](https://github.com/github/codeql-action/blob/main/autobuild/action.yml)。
- `resolve-environment`:[实验性] 尝试推断适合自动构建的构建环境。有关输入参数的信息,请参阅 [resolve-environment 操作定义](https://github.com/github/codeql-action/blob/main/resolve-environment/action.yml)。
- `start-proxy`:[实验性] 启动 HTTP 代理服务器。仅供内部使用,可能会在不另行通知的情况下发生更改。有关输入参数的信息,请参阅 [start-proxy 操作定义](https://github.com/github/codeql-action/blob/main/start-proxy/action.yml)。
- `setup-codeql`:[实验性] 类似于 `init`,但它只安装 CodeQL CLI,不初始化数据库。
### 工作流权限
所有高级设置的代码扫描工作流都必须具有 `security-events: write` 权限。私有仓库中的工作流还必须具有 `contents: read` 权限。有关更多信息,请参阅“[为作业分配权限](https://docs.github.com/en/actions/using-jobs/assigning-permissions-to-jobs)”。
### 构建模式
CodeQL Action 支持不同的构建模式来分析源代码。可用的构建模式有:
- `none`:将在不构建源代码的情况下创建数据库。适用于所有解释型语言和某些编译型语言。
- `autobuild`:将通过尝试自动构建源代码来创建数据库。适用于所有编译型语言。
- `manual`:将通过使用手动指定的构建命令构建源代码来创建数据库。要使用此构建模式,请在工作流中的 `init` 和 `analyze` 步骤之间指定手动构建步骤。适用于所有编译型语言。
#### 我应该使用哪种构建模式?
解释型语言必须使用 `none` 作为构建模式。
对于编译型语言:
- `manual` 构建模式通常会产生最精确的结果,但设置起来更困难,并且会导致分析运行时间稍长。
- `autobuild` 构建模式设置起来更简单,但仅适用于具有 autobuild 脚本的启发式方法可以猜测到的通用构建步骤的项目。如果 `autobuild` 失败,则必须切换到 `manual` 或 `none`。如果 `autobuild` 成功,则结果和运行时间将与 `manual` 模式相同。
- `none` 构建模式设置起来也更简单,运行速度稍快,但可能会遗漏某些警报。如果您的仓库在编译期间执行任何代码生成,或者存在从工作流无法访问的注册表下载的依赖项,则可能会发生这种情况。Swift、Go 或 Kotlin 尚不支持 `none`。它目前在 C/C++ 中处于公开预览阶段。
## 支持的 CodeQL Action 版本
目前支持以下版本的 CodeQL Action:
- v4(最新)
- v3
## GitHub Enterprise Server 上支持的 CodeQL Bundle 版本
我们通常在发布新版 GitHub Enterprise Server (GHES) 次要版本时发布新版 CodeQL Action 和 Bundle 的次要版本。当某个版本的 GHES 被弃用时,随其一起发布的 CodeQL Action 和 Bundle 版本也会被弃用。
| 最低 CodeQL Action 版本 | 最低 CodeQL Bundle 版本 | GitHub 环境 | 备注 |
|-----------------------|-------------------------------|--------------------|-------|
| `v4.31.10` | `2.23.9` | Enterprise Server 3.20 | |
| `v3.29.11` | `2.22.4` | Enterprise Server 3.19 | |
| `v3.28.21` | `2.21.3` | Enterprise Server 3.18 | |
| `v3.28.12` | `2.20.7` | Enterprise Server 3.17 | |
| `v3.28.6` | `2.20.3` | Enterprise Server 3.16 | |
| `v3.28.6` | `2.20.3` | Enterprise Server 3.15 | |
| `v3.28.6` | `2.20.3` | Enterprise Server 3.14 | |
请在 [GitHub Enterprise Server 版本](https://docs.github.com/en/enterprise-server/admin/all-releases#releases-of-github-enterprise-server)中查看 GHES 发布和弃用日期的完整列表。
## 在高级设置中保持 CodeQL Action 最新
如果您使用的是[高级设置](https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/configuring-advanced-setup-for-code-scanning),我们建议您在工作流文件中使用主要版本标签(例如 `v4`)来引用 CodeQL Action。这可确保您的工作流自动采用该主要版本中的最新版本,包括错误修复、新功能和更新的 CodeQL CLI 版本。
如果您固定到特定的 commit SHA 或补丁版本标签,请确保通过(例如 [Dependabot](https://docs.github.com/en/code-security/dependabot/working-with-dependabot/keeping-your-actions-up-to-date-with-dependabot))使其保持最新。某些 CodeQL Action 功能由服务器端标志启用,这些标志可能会随着时间的推移而被移除,这可能导致旧版本失去功能。
## 故障排除
阅读有关[代码扫描故障排除](https://docs.github.com/en/code-security/code-scanning/troubleshooting-code-scanning)的信息。
## 贡献
本项目欢迎贡献。有关如何构建、安装和贡献的详细信息,请参阅 [CONTRIBUTING.md](CONTRIBUTING.md)。
标签:CI/CD安全, CodeQL, DevSecOps, GitHub Actions, GitHub Advanced Security, GitHub Security Lab, IPv6支持, Llama, SAST, TLS抓取, 上游代理, 代码安全, 安全加固, 安全漏洞检测, 安全评估工具, 数据可视化, 漏洞枚举, 盲注攻击, 自动化安全审计, 自动化攻击, 自动笔记, 质量保证, 软件安全, 错误基检测, 静态代码分析