用途
CI/CD 安全门禁用于在持续集成与持续部署流水线中自动加入安全扫描,在代码部署前拦截代码漏洞、泄露的密钥和危险依赖。资料指出,其背景是马来西亚法院案例中的发现:没有证据表明系统在上线前经过测试或漏洞扫描;在 PDPA 2024 下,发布带有已知漏洞且未经测试的代码属于刑事过失。
主要能力:三道门禁
| 门禁 | 捕获内容 | 工具 |
|---|---|---|
| SAST | 你自己代码中的 SQL 注入、XSS、不安全模式 | CodeQL / Semgrep |
| 密钥扫描 | 意外提交的 API 密钥、密码、令牌 | Gitleaks |
| 依赖审计 | 第三方包中的已知 CVE | npm audit / pip audit |
CodeQL 可捕获:SQL 注入模式、跨站脚本(XSS)、路径遍历、不安全随机数、硬编码凭据、原型污染、命令注入。支持语言:javascript-typescript、python、java、go、ruby、csharp、cpp。
Gitleaks 可捕获:AWS 访问密钥、Google Cloud 密钥、Stripe/Xendit/支付 API 密钥、数据库连接字符串、私钥(RSA、EC)、JWT 密钥、通用高熵字符串。
使用方式
GitHub Actions 实现
资料给出完整安全流水线示例:定义 security 与 deploy 两个 job,deploy 通过 needs: security 依赖安全任务,安全失败即阻止部署。安全 job 步骤包括:Checkout、初始化 CodeQL、执行 CodeQL 分析、运行 Gitleaks 密钥扫描。部署 job 步骤包括:Checkout、Setup Node、npm ci 安装依赖、运行测试、npm audit --audit-level=high、构建、部署。
关键原则:
- 将 actions 固定到 commit SHA,防止通过标签变更发起的供应链攻击。
- 安全 job 在部署之前运行,
needs: security阻止部署。 - 使用
npm ci,从 lockfile 确定性安装。 - 以 high 级别审计,阻断 high/critical CVE,报告 moderate。
SHA 固定:不要使用 @v4 这类可变标签,始终固定到 commit SHA。查找 SHA 的方法:进入 action 的 GitHub releases 页面,找到版本标签(如 v4.2.2),点击 commit hash,复制完整的 40 位 SHA。
Gitleaks 自定义规则
可通过 .gitleaks.toml 扩展默认规则,示例中定义了 Clerk Secret Key 与 Xendit Secret Key 的正则规则,并通过 allowlist 排除 .env.example 和测试文件路径。
依赖审计
Node.js:CI 中使用 npm audit --audit-level=high 在 high/critical 时失败;本地使用 npm audit 查看全部;使用 npm audit fix 修复可安全修复项。
Python:pip audit --fix --dry-run、pip audit --desc。
package.json 脚本示例:security:audit、security:test、verify。
GitLab CI 等价实现
定义 security、test、deploy 三个阶段。sast 阶段使用 returntocorp/semgrep 镜像执行 semgrep --config=auto --error .,allow_failure: false;secret-detection 阶段使用 zricethezav/gitleaks 镜像执行 gitleaks detect --source . --verbose,allow_failure: false;test 阶段 needs: [sast, secret-detection],执行 npm ci、测试和 npm audit --audit-level=high;deploy 阶段 needs: [test],仅在 main 分支运行。
门禁失败时的处理
| 门禁 | 失败情况 | 处理动作 |
|---|---|---|
| CodeQL | 发现 SQL 注入模式 | 修复查询,使用参数化绑定 |
| Gitleaks | 提交中检测到密钥 | 移除密钥、轮换密钥、加入 .gitignore |
| npm audit | 依赖中存在 high/critical CVE | 更新包或寻找替代方案 |
| 测试 | 测试失败 | 部署前修复代码 |
适用场景
适用于任何使用 CI/CD 流水线的项目,尤其是需要在每次推送时自动执行安全扫描、并在发现漏洞或密钥时阻止部署的团队。资料提到其满足 PDPA 2024 的合规要求:尽职调查证据(自动化扫描证明上线前已检查)、持续监控(每次推送都运行)、相称的安全措施(SAST + 密钥扫描 + 依赖审计覆盖主要攻击向量)、审计轨迹(GitHub Actions 日志提供每次安全检查的时间戳证据)。
限制
资料未提供该方案的具体收费、价格、平台限制或性能数据。工具本身(CodeQL、Gitleaks、Semgrep、npm audit、pip audit)的许可与使用限制需参考各自官方文档,资料中暂未提供。