d-beloved/gitsentry

GitHub: d-beloved/gitsentry

一款 AI 驱动的 GitHub App,在 PR 阶段自动审查 AI 编码工具引入的安全漏洞。

Stars: 1 | Forks: 0

# Gitsentry.dev **[MIT License](LICENSE)** · **[在 GitHub 上安装 →](https://github.com/apps/gitsentry-dev)** ![Gitsentry.dev 运行演示](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/b4d719c271220344.gif) ## 功能简介 Gitsentry.dev 作为 GitHub App 安装。当 PR 被打开或更新时,它会对 diff 运行 AI 安全分析,并将发现的问题作为 GitHub review 评论发布 —— 就在你的团队日常工作的位置。 ``` PR opened / updated → webhook → AI analysis → GitHub review comment ``` 在 Pro 版本中,如果存在严重或高风险级别的发现,将会发布一个状态为 `failure` 的 GitHub Check Run。将其接入 branch protection,在问题解决或忽略之前,合并操作将被阻止。 **分析引擎和 webhook 服务器完全开源 (MIT)。** [gitsentry.dev](https://gitsentry.dev) 上的托管仪表板是专有的 —— 就像 Sentry 或 PostHog 的模式一样。你可以使用此代码库自行托管整个技术栈。 ## 安装 **[在 GitHub 上安装 Gitsentry.dev →](https://github.com/apps/gitsentry-dev)** 一键安装。无需任何配置文件即可开始使用。 ## 检测范围 | 类别 | 示例 | | ---------------------------------------------------- | ------------------------------------------------- | | `hardcoded_secret` | 源代码中的 API keys、tokens、passwords | | `missing_auth` | 没有身份验证 middleware 的新路由 | | `sql_injection` | 拼接到 SQL 查询中的用户输入 | | `idor` | 未进行所有权检查即获取用户提供的 ID | | `verbose_error` | 暴露给客户端的 Stack traces / DB 错误 | | `unvalidated_input` | 传递给危险操作的用户输入 | | `missing_rate_limit` | 没有速率限制的 Auth endpoint | | `path_traversal` | 文件系统操作中的用户输入 | | `xss` | HTML 响应中未经清理的用户内容 | | `open_redirect` | 用户可控的重定向 URL | | `csrf` / `weak_session_management` | 浏览器和会话流程弱点 | | `privilege_escalation` / `mass_assignment` | 权限和对象突变滥用 | | `race_condition` / `business_logic_abuse` | 工作流和状态操作漏洞 | | `cors_misconfiguration` / `security_headers_missing` | 部署和浏览器边界风险 | | `dependency_risk` | 脆弱或可疑的依赖项行为 | | `attack_chain` | 多个小问题组合成一个漏洞利用 | 该 prompt 专门针对 AI 编码助手生成的模式进行了调优 —— 而非通用的 SAST 规则。 ## 重新扫描 PR 在任何已打开的 PR 下发表 `/gitsentry rescan` 评论,即可针对当前的 HEAD commit 触发一次新的扫描。只有 repo 的协作者、成员和所有者才能触发重新扫描。现有的 Gitsentry 评论会就地更新,而不会发布新评论。 ## 根据发现的问题阻止合并 (Pro) Gitsentry 在 Pro 版本中,会在每次 PR 扫描后发布一个名为 `Gitsentry Security Scan` 的 **GitHub Check Run**。当存在严重或高风险级别的发现时,结论为 `failure`;如果 diff 没问题,则为 `success`。 Pro 组织还可获得**自动 branch protection 设置**:在 repo 上进行首次扫描后,Gitsentry 会以非破坏性的方式将 `Gitsentry Security Scan` 添加到 repo 必需的状态检查中。无需手动配置 GitHub 设置。 手动设置方法: 1. 前往你的 repo → **Settings → Branches** 2. 编辑(或创建)默认分支的保护规则 3. 启用 **"Require status checks to pass before merging"** 4. 将 **`Gitsentry Security Scan`** 添加为必需的检查 Free 和 Starter 计划不提供 check run —— 发现的问题将以 PR 评论的形式显示,但绝不会阻止合并。升级到 Pro 即可启用阻止功能。 ## 自托管 ### 前置条件 - Node.js 20+ - 一个 GitHub App(参见下方的设置) - Supabase 项目 - Google Gemini API key - Redis(可选 —— 如果没有,将回退到内联处理) ### 1. 创建 GitHub App 1. 前往 **GitHub → Settings → Developer settings → GitHub Apps → New GitHub App** 2. 将 webhook URL 设置为 `https://your-domain.com/webhook` 3. 生成 webhook 密钥和私钥 4. 授予以下权限: - **Repository → Pull requests**: Read & write - **Repository → Contents**: Read - **Repository → Checks**: Read & write(check run 和合并阻止必需) - **Repository → Administration**: Read & write(自动 branch protection 设置必需) 5. 订阅事件:`Pull request`、`Issue comment` ### 2. 配置环境 ``` cp apps/backend/.env.example apps/backend/.env # 填写你的值 ``` ``` # apps/backend/.env GITHUB_APP_ID= GITHUB_APP_PRIVATE_KEY= # base64-encoded PEM GITHUB_WEBHOOK_SECRET= GITHUB_CLIENT_ID= GITHUB_CLIENT_SECRET= GEMINI_API_KEY= # ANTHROPIC_API_KEY= # 取消注释以切换到 Claude SUPABASE_URL= SUPABASE_SECRET_KEY= REDIS_URL= # optional — redis://localhost:6379 INTERNAL_API_KEY= # shared secret with dashboard; generate: openssl rand -hex 32 PRODUCT_URL= # e.g. https://gitsentry.dev PORT=3200 NODE_ENV=development ALLOWED_ORIGINS=http://localhost:3201 # comma-separated in prod RESEND_API_KEY= # optional — Resend email alerts FROM_EMAIL= # optional — e.g. Gitsentry.dev ``` ### 3. 运行数据库 schema 针对你的 Supabase 项目运行 `apps/backend/src/db/schema.sql` 中的 SQL。 ### 4. 启动服务器 ``` yarn install yarn dev ``` ### 5. 为测试暴露本地环境 ``` npx smee -u https://smee.io/your-channel -t http://localhost:3200/webhook ``` ## 代码库结构 此代码库**仅包含开源扫描器**。源代码位于 `apps/backend/`;`packages/scanner-contract/` 定义了公开的发现类型和常量。 ``` apps/backend/src/ webhooks/ ← webhook router + event handlers lib/ ai.ts ← AI abstraction layer (Gemini; swap to Claude in one function) github.ts ← Octokit wrapper differ.ts ← diff parser and additions extractor scorer.ts ← severity scoring notifier.ts ← Slack + email alerts queue.ts ← Bull queue + dispatchScan helper workers/ scanWorker.ts ← core scan processor api/ sweep.ts ← POST /api/sweep (on-demand security sweep) rescan.ts ← POST /api/rescan (dashboard-triggered rescan) db/ ← Supabase client, queries, types packages/scanner-contract/ types.ts ← Finding, AIAnalysisResult, ScanContext, ScanJobData constants.ts ← SEVERITY_ORDER, SEVERITY_EMOJI, CATEGORY_LABELS ``` [gitsentry.dev](https://gitsentry.dev) 上的仪表板是托管且专有的。为其提供支持的分析引擎完全开源。 ## 贡献 欢迎提交 Pull requests。请参阅 [CONTRIBUTING.md](CONTRIBUTING.md)。 ## License MIT —— 请参阅 [LICENSE](LICENSE)。
标签:AI代码审查, DevSecOps, GitHub App, MITM代理, 上游代理, 搜索引擎查询, 自动化攻击, 静态应用安全测试