3062-in-zamud/guardpr
GitHub: 3062-in-zamud/guardpr
GuardPR 是一款开源 GitHub Action,实现从安全漏洞检测到自动生成测试验证修复 PR 的端到端自动化流水线,所有处理均在 runner 本地完成。
Stars: 0 | Forks: 0
Automated Security Fix PRs — Zero external transmission, test-verified, and free.
Quick Start · Features · Docs · 日本語
## 什么是 GuardPR? GuardPR 是一个 GitHub Action,可以自动检测安全漏洞、生成修复补丁、通过测试进行验证,并创建草稿 PR——所有这些都在单次 workflow 运行中完成。在 Community 模式下,没有任何代码或发现结果会离开您的 runner。Pro 模式为显式选择加入,且仅发送汇总统计数据。 ## 演示 GuardPR 会检测漏洞并自动创建修复 PR:  *Step Summary 显示检测到的漏洞及置信度分数*  *草稿 PR,包含发现结果、描述和回滚说明*  *自动生成的补丁:针对 XSS 的 DOMPurify 导入,针对未保护路由的 auth 中间件* ## 快速开始 **1.** 将 workflow 文件添加到您的仓库: ``` # .github/workflows/guardpr.yml name: GuardPR Security Scan on: push: branches: [main] pull_request: branches: [main] permissions: contents: write pull-requests: write jobs: security-scan: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: 3062-in-zamud/guardpr@v0 with: github-token: ${{ secrets.GITHUB_TOKEN }} ``` **2.** 提交并推送。 **3.** 检查 **Actions** 标签页查看扫描结果,以及 **Pull Requests** 标签页查看草稿修复 PR。 ## 功能特性 | 类别 | 检测项 | 修复方式 | 文件类型 | |----------|---------|-------|------------| | **Secrets** | API keys, tokens, private keys, connection strings | 仅通知 PR(diff 中不包含 secret) | 所有文件 (Gitleaks) | | **Dependencies** | 依赖项中的已知 CVE | 版本升级至修复版本 | `package-lock.json`, `yarn.lock`, `pnpm-lock.yaml`, `Gemfile.lock`, `poetry.lock`, `go.sum`, `Cargo.lock`, `composer.lock`, `requirements.txt` | | **XSS** | `dangerouslySetInnerHTML`, `innerHTML`, `eval()`, `javascript:` URLs | 添加净化处理或安全替代方案 | `.ts`, `.tsx`, `.js`, `.jsx` | | **Authorization** | 缺少必需 auth 中间件的路由 | 向路由处理程序添加中间件 | Express, Next.js | 每项发现都包含一个**置信度分数**。只有高于配置阈值(默认值:0.9)的发现才会生成修复 PR。 `Secrets` 和 `Dependencies` 扫描器与语言无关:它们检查各生态系统中的文件内容和 lockfiles,而不是单一的编程语言解析器。 ### 语言生态系统支持 | 扫描器 | 范围 | 详情 | |---------|-------|---------| | **Secrets** (Gitleaks) | 所有语言 & 文件类型 ✅ | 基于模式的检测;在任何语言的文件中查找 API keys, tokens, private keys | | **Dependencies** (OSV-Scanner) | 9 个生态系统 ✅ | npm / yarn / pnpm / Gemfile / poetry / go.sum / Cargo / Composer / requirements.txt | | **XSS** | 仅 JS / TS | `.ts`, `.tsx`, `.js`, `.jsx` — 基于 AST 的分析 | | **Authorization** | 仅 Express / Next.js | 特定框架的中间件检测 | 有关 Gitleaks secret 模式的完整列表,请参阅 [Gitleaks default rules](https://github.com/gitleaks/gitleaks/blob/master/config/gitleaks.toml)。 有关 OSV-Scanner 支持的所有 lockfile 格式,请参阅 [OSV-Scanner documentation](https://google.github.io/osv-scanner/supported-languages-and-lockfiles/)。 ## GuardPR 的定位 安全工具生态系统在各个层面都提供了出色的解决方案。 GuardPR 并不打算取代它们——它填补了一个特定的细分领域: 一个端到端的 **scan → patch → test → PR** 流水线,完全运行 在您的 GitHub Actions runner 上,无需外部账户或数据传输。 将 GuardPR 与 [CodeQL][cql], [Snyk][snyk], 或 [Pixee][pixee] 结合使用 通常是成熟安全计划的正确选择。 | | **GuardPR** | [**Copilot Autofix**][ca] | [**Snyk**][snyk] | [**CodeQL**][cql] | [**Pixee**][pixee] | |---|---|---|---|---|---| | **功能** | 在单个 Action 中完成扫描 + 自动修补 PR | 为 CodeQL 警报生成 AI 修复建议 | 广泛的 SCA, SAST, container, IaC 覆盖范围 | 针对 10+ 种语言的深度 SAST | 将来自任何扫描器的 SARIF 结果转换为修复 PR | | **部署方式** | GitHub Action (仅 yaml) | GitHub 原生 UI | SaaS + CLI + Action | GitHub Action / CLI | GitHub App | | **所需账户** | 无(仅需 GitHub token) | GitHub Copilot 计划 | Snyk 账户 | 无(公共仓库) | Pixee 账户 | | **修复交付** | 包含补丁的草稿 PR | PR 中的内联建议 | 公告 + 引导式修复 | 仅警报(无自动修补) | 包含补丁的草稿 PR | | **代码离开 runner** | 否(Community 模式) | 发送到 AI model | 发送到 Snyk cloud | 否 | 发送到 Pixee cloud | | **语言范围** | JS/TS (XSS, Authz) + 所有文件 (secrets, SCA) | 9 种语言 | 20+ 种语言 | 10+ 种语言 | Java, Python, JS/TS | | **私有仓库免费** | 是 | 需付费计划 | 需付费计划 | 需要 GHAS | 提供免费层级 | | **开源** | 是 (MIT) | 否 | 否 | 是 (queries: MIT) | 部分开源 | ## Community 与 Pro 对比 所有核心功能均为免费开源。 | | Community | Pro | |---|---|---| | Secret 检测 | 是 | 是 | | 依赖扫描 | 是 | 是 | | XSS 检测 | 是 | 是 | | Authorization 扫描 | 是 | 是 | | 自动修复 PR | 是 | 是 | | 审计日志 artifacts | 是 | 是 | | Dashboard & analytics | -- | 计划中 | | 自定义检测规则 | -- | 计划中 | | Slack/Teams 通知 | -- | 计划中 | | 优先支持 | -- | 计划中 | Pro 集成是通过 `pro-api-key` action 输入项选择加入的。Community 用户不受影响——没有任何数据离开您的 runner。请参阅 [ADR-009](docs/adr/009-pro-opt-in-telemetry.md) 了解隐私设计。 ## 配置 ### 输入项 | Input | 必填 | 默认值 | 描述 | |-------|----------|---------|-------------| | `github-token` | 是 | -- | 用于 API 访问的 GitHub token | | `config-path` | 否 | `.guardpr.yml` | 配置文件路径 | | `confidence-threshold` | 否 | `0.9` | 最小置信度分数 (0.0 - 1.0) | | `create-pr` | 否 | `true` | 为修复创建草稿 PR | | `run-tests` | 否 | `true` | 应用补丁后运行测试 | | `test-command` | 否 | `npm test` | 要运行的测试命令 | | `scanners` | 否 | `all` | 逗号分隔的扫描器列表 | | `pro-api-key` | 否 | -- | 用于 dashboard 集成的 Pro API key(使用 GitHub Secrets) | ### 输出项 | Output | 描述 | |--------|-------------| | `findings-count` | 发现结果总数 | | `high-confidence-count` | 高于置信度阈值的发现结果 | | `low-confidence-count` | 低于置信度阈值的发现结果 | | `pr-url` | 创建的草稿 PR 的 URL | | `pr-number` | 创建的草稿 PR 的编号 | | `audit-artifact-name` | 上传的审计日志 artifact 名称 | ### .guardpr.yml 在您的仓库根目录创建 `.guardpr.yml` 以自定义行为: ``` confidenceThreshold: 0.9 createPr: true runTests: true testCommand: "npm test" scanners: secrets: enabled: true dependencies: enabled: true xss: enabled: true customSanitizers: - mySanitize authz: enabled: true framework: auto authMiddleware: - isAuthenticated - isAdmin protectedRoutes: - pattern: "/api/admin/*" requiredMiddleware: ["isAdmin"] - pattern: "/api/*" requiredMiddleware: ["isAuthenticated"] patching: maxLinesPerPatch: 50 maxFilesPerPatch: 5 ``` 完整配置参考请见 [docs/configuration.md](docs/configuration.md)。 ## 工作原理 ``` 1. Scan Gitleaks + OSV-Scanner + built-in XSS/Authz rules | 2. Score Confidence scoring with contextual analysis | 3. Patch Generate fix patches for high-confidence findings | 4. Test Apply patches and run test suite to validate | 5. PR Open draft PR with description, checklist, and audit trail ``` 所有处理均在 GitHub Actions runner 上进行。在 Community 模式下,没有任何代码或发现结果会离开您的环境。在 Pro 模式下,仅当配置了 `pro-api-key` 时才会发送汇总统计数据。完整流水线详情请参阅 [docs/architecture.md](docs/architecture.md)。 ## 安全与隐私 ### 零外部传输 所有处理均在 GitHub Actions runner 内部运行。没有任何内容离开您的环境。 | 数据 | 外部目的地 | GuardPR 行为 | |------|---------------------|-----------------| | 源代码 | 外部服务 | 从不发送 | | Secrets / tokens | LLM / AI APIs | 从不发送 | | 扫描结果 | 第三方服务器 | 从不发送 | | PR 内容 | GuardPR 服务器 | 不存在服务器 | | Package names | OSV.dev | 发送(与 `npm audit` 相同) | 完整策略请参阅 [ADR-006](docs/adr/006-no-external-transmission.md)。 - **Community 模式无外部遥测**:所有处理均在 Actions runner 上进行。只有 OSV-Scanner 会向 OSV.dev 查询 package names(不含源代码)。Pro 模式仅在通过 `pro-api-key` 显式启用时发送汇总统计数据。 - **5 层 secret 防御**:检测、运行时屏蔽、补丁抑制、审计日志编辑、PR 描述编辑。 - **二进制完整性**:执行前通过 SHA-256 校验和验证扫描器二进制文件。 - **最小权限**:仅 `contents: write`, `pull-requests: write`, 和 `actions: read`。 完整安全策略请参阅 [SECURITY.md](SECURITY.md)。 ### 所需权限 ``` permissions: contents: write # Create branches and push fix commits pull-requests: write # Open draft PRs, add labels # actions: read is implicit for artifact upload ``` ## 示例 - [Basic workflow](examples/basic-workflow.yml) -- 最小设置,全部使用默认值。 - [Advanced workflow](examples/advanced-workflow.yml) -- 矩阵策略,按扫描器运行,step summary。 ### 完整配置 启用所有扫描器,计划运行,显式权限: ``` name: GuardPR Security Scan (Full) on: push: branches: [main, develop] pull_request: schedule: - cron: '0 9 * * 1' # Weekly Monday 9am UTC permissions: contents: write pull-requests: write issues: write jobs: security-scan: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: 3062-in-zamud/guardpr@v0 with: github-token: ${{ secrets.GITHUB_TOKEN }} create-pr: true run-tests: true scanners: secrets,dependencies,xss,authz confidence-threshold: '0.8' ``` ### Pro 配置 使用 `pro-api-key` 进行 dashboard 集成(即将推出): ``` name: GuardPR Security Scan (Pro) on: push: branches: [main] pull_request: permissions: contents: write pull-requests: write jobs: security-scan: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: 3062-in-zamud/guardpr@v0 with: github-token: ${{ secrets.GITHUB_TOKEN }} pro-api-key: ${{ secrets.GUARDPR_PRO_KEY }} # Coming soon ``` ## 文档 | 文档 | 描述 | |----------|-------------| | [Getting Started](docs/getting-started.md) | 安装、基本和高级配置、故障排除 | | [Configuration Reference](docs/configuration.md) | 完整的 `.guardpr.yml` 选项参考 | | [Detection Rules](docs/detection-rules.md) | 所有检测规则、置信度因素和修复策略 | | [Architecture](docs/architecture.md) | 系统设计、流水线数据流、组件图 | | [Security Policy](SECURITY.md) | 漏洞报告、安全设计、权限模型 | | [ADRs](docs/adr/) | 架构决策记录 | ## 贡献 开发设置、项目结构和贡献指南请参阅 [CONTRIBUTING.md](CONTRIBUTING.md)。 ## 许可证 [MIT](LICENSE)标签:CI/CD 安全, DevSecOps, GitHub Action, GitHub 工作流, GPT, Python, SAST, 上游代理, 云安全监控, 依赖安全, 安全漏洞检测, 数据可视化, 数据投毒防御, 无后门, 测试验证, 漏洞管理, 盲注攻击, 自动修复, 自动化 PR, 自动化攻击, 补丁生成, 软件供应链安全, 远程方法调用, 零外传, 静态分析