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 作为 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代理, 上游代理, 搜索引擎查询, 自动化攻击, 静态应用安全测试