isaaaac-2/site-security-pipeline

GitHub: isaaaac-2/site-security-pipeline

将 Semgrep、Snyk 和 OWASP ZAP 三层安全扫描集成到 GitHub Actions 中,为小型网站提供从代码到部署的自动化安全门禁与漏洞追踪。

Stars: 1 | Forks: 0

# 站点安全 Pipeline 一个分层安全扫描 Pipeline,可在代码、依赖项和实时部署到达生产环境之前,捕获其中的漏洞。它不仅仅是一个扫描器,还是一个 CI/CD 门禁,可以阻止不安全的推送,并将发现的问题转化为可跟踪的修复任务。 ## 我在解决什么问题? 大多数作品集网站和小型项目在发布时没有任何自动化安全检查。漏洞在代码、依赖项和部署配置中悄无声息地积累,直到有人手动审计它们(如果有的话)。 ## 为什么这很重要? 只有将安全扫描集成到开发人员已经在使用的工作流中,它才能发挥作用。独立的扫描器会被忽视;而一个能够阻止错误推送并自动创建 issue 的 Pipeline 门禁则会得到执行。 ## 扫描内容 - 每次推送时使用 Semgrep 进行静态代码分析(p/security-audit 规则集) - 使用 OWASP ZAP 对实时 Vercel 部署进行动态测试 - 使用 Snyk 进行依赖项漏洞扫描,以检测已知的 CVE - 安全标头验证(CSP、X-Frame-Options、X-Content-Type-Options、Permissions-Policy) - 集中式的手动扫描器(workflow_dispatch),用于跨仓库健康检查 ## 技术栈 - Semgrep (SAST) - OWASP ZAP (DAST) - Snyk (SCA) - GitHub Actions(CI/CD 编排) - Vercel(部署目标) ## 工作原理 1. 推送到 main 分支会触发 Semgrep 静态分析和 Snyk 依赖项扫描 2. 自门禁工作流在检测到高危发现时会阻止推送 3. ZAP 针对实时的 Vercel 部署运行基线 DAST 扫描 4. ZAP 的发现会自动创建 GitHub issue,以便进行可跟踪的修复 5. 集中式扫描器(workflow_dispatch)可手动触发,以进行跨仓库检查 6. 验证 vercel.json 中的安全标头,并根据 ZAP 的发现进行更新 ## 架构 ``` Push to main │ ▼ ┌─────────────────────────────┐ │ GitHub Actions │ ├─────────────────────────────┤ │ • Semgrep (SAST) │ │ • Snyk (SCA) │ │ Self-gating security scan │ └──────────────┬──────────────┘ │ Pass Security Checks │ ▼ ┌─────────────────────────────┐ │ Deploy to Vercel │ └──────────────┬──────────────┘ │ ▼ ┌─────────────────────────────┐ │ OWASP ZAP (DAST) │ │ Baseline scan vs live site │ └──────────────┬──────────────┘ │ Findings Detected │ ▼ ┌─────────────────────────────┐ │ Auto-create GitHub Issues │ │ Trackable remediation │ └─────────────────────────────┘ ``` ## 已知的权衡 - CSP unsafe-inline:Vite 开发服务器和生产构建中的内联样式需要此项。通过严格的 frame-ancestors 和 script-src 指令进行缓解。完整的基于 nonce 的 CSP 将需要构建时注入。 - ZAP 误报:Sec-Fetch 标头和某些 cookie 标志会触发不适用于静态站点的警告。我们对此进行了记录并予以接受,而不是全局抑制它们。 - Snyk token 管理:CI/CD 使用 GitHub Secrets。本地开发需要手动导出 token。目前还没有自动的密钥轮换。 - DAST 范围:ZAP 基线扫描仅覆盖面向公众的页面。经过身份验证的路由和 API endpoint 需要单独的 spider 配置。
标签:DevSecOps, 上游代理, 动态应用安全测试, 安全扫描, 时序注入, 错误基检测, 静态代码分析