用途:面向需要在每次拉取请求上自动检测代码级漏洞的开发与安全团队,把 CodeQL 和 Semgrep 两类静态应用安全测试(SAST)接入 GitHub Actions。适用于从人工/周期性安全审查迁移到持续安全测试,以及满足 SOC 2、PCI DSS、NIST SSDF 等合规对自动化代码分析证据的要求。不适用于运行时漏洞检测(应用 DAST)、第三方依赖扫描(应用 Snyk 等 SCA 工具)或基础设施即代码扫描(应用 Checkov、tfsec)。
主要能力:用 CodeQL 在 PR、推送和每周定时任务中做语义化数据流与污点分析;用 Semgrep 做更快的模式匹配扫描,支持 auto、p/owasp-top-ten、p/cwe-top-25 等规则集与自定义规则;将 Semgrep 结果以 SARIF 上传到与 CodeQL 相同的 GitHub 安全标签页;通过分支保护把扫描检查设为合并前必须通过的质量门禁;用 CodeQL 配置排除噪声查询、用 nosemgrep 注解和 .semgrepignore 抑制误报;最后用 GitHub 安全概览与 API 聚合报告发现。
必要用法要点:需启用 GitHub Actions;私有仓库上运行 CodeQL 需 GitHub Advanced Security 许可(公共仓库免费);Semgrep 托管规则需 Semgrep 账号(有免费版)。支持的语言为 Python、JavaScript/TypeScript、Java、C/C++、C#、Go、Ruby、Swift、Kotlin。工作流含 CodeQL 分析与 Semgrep 两个作业,Semgrep 通过容器镜像 semgrep/semgrep 运行并设置 SEMGREP_APP_TOKEN,扫描命令示例:semgrep ci --config auto --config p/owasp-top-ten --config p/cwe-top-25 --sarif --output semgrep-results.sarif --severity ERROR --error;上传用 github/codeql-action/upload-sarif@v3。分支保护可用 gh api repos/{owner}/{repo}/branches/main/protection --method PUT 设置必需状态检查。
限制与注意事项:多语言 monorepo 若每个 PR 全量分析会显著增加 CI 时间,应使用路径过滤只触发相关语言扫描;Semgrep 的 --config auto 可能产生与 CodeQL 重复的告警;过度抑制规则会造成盲区,需对照 OWASP Top 10 与 CWE Top 25 校验。具体价格、规则数量、平台支持范围等资料中另有说明的以原文为准,未提及的细节暂未提供。