carvalhocaio/trespass

GitHub: carvalhocaio/trespass

一款支持密钥检测、依赖审计、SAST 静态分析和 LLM 审查的 GitHub 仓库安全扫描平台,提供可视化结果展示与 Issue 跟踪。

Stars: 0 | Forks: 0

# Trespass Trespass 会连接到你的 GitHub 账户,通过 GitHub API 下载仓库内容,并运行四个分析层: 1. **机密信息检测** — 使用 regex + entropy 模式检测 API key、token、PEM key 和常见的凭据前缀 2. **依赖审计** — 查询 [OSV.dev](https://osv.dev) 获取 `package.json` 和 `requirements.txt` 中已知的 CVE 3. **SAST 模式** — 检测 SQL injection、`eval()`、command injection、XSS vector、弱密码学和 LLM prompt injection 模式 4. **LLM 审查** _(可选)_ — 将标记的代码片段发送到你自己的模型(OpenAI、Anthropic 或 Google)以获取详细的发现结果和修复建议 扫描结果会按每次扫描进行持久化存储,并通过具有按严重程度细分和可展开代码片段的暗色主题 UI 展示。 ## 功能 - GitHub OAuth 登录(Better-Auth) - 使用 AES-256-GCM 对 GitHub PAT 和 LLM API key 进行加密存储 - “即发即忘”的后台扫描 — HTTP 请求不会被阻塞 - 包含状态跟踪(`queued → running → done | error`)的每次扫描结果历史记录 - 扫描期间的终端风格进度面板 — 实时步骤跟踪(依赖审计 → 文件树 → 代码扫描 → LLM 审查),包含计数和状态图标 - 结果页面上的重新扫描按钮 — 为相同的 repo 启动新的扫描并导航到最新的结果 - 可以直接从任何发现结果中打开 GitHub Issue — 自动预填标题、严重程度、代码片段和修复建议 - LLM 审查可平滑降级:如果未配置 API key,扫描仍会运行三个静态层 - UI 页脚中的语义化版本控制徽章 ## 技术栈 - **Frontend**:Nuxt 4 · Vue 3 · shadcn-vue · Tailwind CSS v4 - **Backend**:Hono · Node.js - **Database**:PostgreSQL(在 [Neon](https://neon.tech) 上测试过) · Drizzle ORM - **Auth**:带有 GitHub OAuth 的 Better-Auth - **Monorepo**:pnpm workspaces · Turborepo - **Linting**:Biome(ultracite 规则集) ## 前置条件 - Node.js 22+ - pnpm 11+ - PostgreSQL 15+(或 Neon 连接字符串) - 一个 GitHub OAuth App(Client ID + Secret) ## 安装说明 ``` git clone cd trespass pnpm install ``` 复制并填写环境变量文件: ``` cp apps/server/.env.example apps/server/.env cp apps/web/.env.example apps/web/.env ``` 推送数据库 schema: ``` pnpm db:push ``` 启动开发服务器: ``` pnpm dev ``` - Frontend:http://localhost:3001 - API:http://localhost:3000 ## 配置 ### `apps/server/.env` | 变量 | 描述 | 必需 | |---|---|---| | `DATABASE_URL` | PostgreSQL 连接字符串 | 是 | | `BETTER_AUTH_SECRET` | 用于 session 签名的 32+ 字符密钥 | 是 | | `BETTER_AUTH_URL` | API 服务器的公共 URL | 是 | | `GITHUB_CLIENT_ID` | GitHub OAuth App 的 client ID | 是 | | `GITHUB_CLIENT_SECRET` | GitHub OAuth App 的 client secret | 是 | | `SECRET_ENCRYPTION_KEY` | 用于 AES-256-GCM 的 64 位十六进制密钥 | 是 | 生成一个 `SECRET_ENCRYPTION_KEY`: ``` node -e "console.log(require('crypto').randomBytes(32).toString('hex'))" ``` ### `apps/web/.env` | 变量 | 描述 | 必需 | |---|---|---| | `NUXT_PUBLIC_SERVER_URL` | API 服务器的公共 URL | 是 | ### 创建 GitHub OAuth App 前往 **GitHub → Settings → Developer settings → OAuth Apps → New OAuth App**: - **Homepage URL**:`http://localhost:3001` - **Authorization callback URL**:`http://localhost:3000/api/auth/callback/github` ## 项目结构 ``` trespass/ ├── apps/ │ ├── web/ # Nuxt 4 frontend │ └── server/ # Hono API │ └── src/ │ ├── routes/ # repos, scans, secrets │ ├── services/ │ │ └── scanner/ # scan engine layers │ └── middleware/ ├── packages/ │ ├── auth/ # Better-Auth configuration │ ├── crypto/ # AES-256-GCM encrypt/decrypt │ ├── db/ # Drizzle schema + migrations │ ├── env/ # Validated env vars (Zod) │ └── github/ # Octokit wrapper └── tests/ # Vitest suite — unit, integration, functional, security, smoke ``` ## 脚本 | 命令 | 描述 | |---|---| | `pnpm dev` | 以 watch 模式启动所有应用 | | `pnpm build` | 构建所有应用 | | `pnpm check-types` | 跨所有包进行 TypeScript 类型检查 | | `pnpm db:push` | 将 schema 推送到数据库(无 migration 文件) | | `pnpm db:generate` | 生成 Drizzle migration 文件 | | `pnpm db:migrate` | 运行待处理的 migration | | `pnpm db:studio` | 打开 Drizzle Studio | | `pnpm test` | 运行完整的测试套件 | | `pnpm check` | Biome lint + 格式检查 | | `pnpm fix` | Biome lint + 格式自动修复 | ## 测试 ``` pnpm test # run all 108 tests across the suite ``` 测试会在每次 pull request 和推送到 main 分支时通过 GitHub Actions 自动运行。无需数据库 — 所有外部 I/O 都会被 mock。 ## 本地 PostgreSQL (Docker) ``` docker compose up -d # DATABASE_URL=postgresql://postgres:password@localhost:5432/postgres ```
标签:LLM代码审查, MITM代理, SAST, StruQ, 机密检测, 测试用例, 盲注攻击, 自动化攻击