用途:在每次拉取请求和定时任务中自动进行代码级漏洞检测,替代人工或周期性安全评审,并满足 SOC 2、PCI DSS、NIST SSDF 等合规对自动化代码分析的证据要求。适用于多语言 monorepo 统一扫描。不适用于运行时漏洞检测(应使用 DAST)、第三方依赖扫描(应使用 SCA 类如 Snyk)以及基础设施即代码扫描(应使用 Checkov 或 tfsec)。
主要能力:CodeQL 工作流支持在 push、pull_request 和每周 cron 计划上运行,使用矩阵策略覆盖多种语言,并启用 security-extended、security-and-quality 查询套件,通过 autobuild 与 analyze 动作完成分析,权限需 actions: read、contents: read、security-events: write。Semgrep 通过 semgrep/semgrep:latest 容器运行 semgrep ci,可叠加 --config auto、p/owasp-top-ten、p/cwe-top-25,输出 SARIF 并上传到 GitHub Security 标签页。可编写 .semgrep/custom-rules.yml 自定义规则,覆盖硬编码数据库连接串、不安全反序列化、缺少 CSRF 保护等组织特有模式。
使用方式:先分别创建 codeql-analysis.yml 与 semgrep.yml 工作流,再用 gh api 设置分支保护,要求 Analyze 与 Semgrep Scan 检查通过;通过 codeql-config.yml 的 queries excludes 与 paths-ignore,以及 nosemgrep 注释和 .semgrepignore 抑制误报;用 gh api repos/{owner}/{repo}/code-scanning/alerts 查询与统计开放告警。
适用场景:多语言 monorepo 需按路径触发不同语言扫描并统一上传 SARIF;或高误报率导致告警疲劳时,导出告警分类、排除噪声查询、建立每周分诊机制。
限制:私有仓库运行 CodeQL 需要 GitHub Advanced Security 许可,公开仓库免费;Semgrep 托管规则和仪表盘需要账号,提供免费层;支持的语言为 Python、JavaScript/TypeScript、Java、C/C++、C#、Go、Ruby、Swift、Kotlin。对私有仓库许可费用、Semgrep 付费价格、具体检测准确率等资料未明确提供。