D4rk-Wolf/PenPad

GitHub: D4rk-Wolf/PenPad

一款企业级渗透测试报告生成器,帮助安全团队高效管理测试项目并生成结构化的客户交付报告。

Stars: 0 | Forks: 0

# PenPad 一款由 **D4rkWolf Studios** 开发的渗透测试报告生成器。PenPad 简化了渗透测试人员的报告流程——记录漏洞发现、使用 CVSS v3.1 进行评分、管理可复用模板,并生成可直接交付给客户的 PDF 报告。 ## 核心功能 - **项目(Engagement)管理** — 通过客户名称、测试范围、测试窗口期和首席测试员来跟踪报告 - **动态漏洞记录** — CVSS 评分、自动严重性判定、描述、影响、建议以及证据 - **精选漏洞模板** — 涵盖 OWASP Web Top 10、OWASP API Top 10 和基础设施领域的 20 个模板 - **自定义模板 (Pro)** — 将任何漏洞发现保存为个人可复用模板 - **PDF 导出 (Pro)** — 包含封面、执行摘要和漏洞细节拆解的专业结构化报告 - **订阅控制** — 通过 Stripe Billing 自动解锁 Pro 功能 ## 技术栈 | 层级 | 技术 | |---|---| | 框架 | Next.js 16 (App Router, React 19) | | 样式 | Tailwind CSS v4 + 自定义设计令牌 | | 数据库 | Supabase (PostgreSQL + Row Level Security) | | ORM | Drizzle ORM | | 支付 | Stripe (订阅 + webhooks) | | PDF | @react-pdf/renderer | | 监控 | Sentry (错误、tracing、已认证的 session replay) | | 托管 | Vercel | ## 架构 ``` Browser ──→ Next.js App Router (Vercel) │ ├── Server Components ──→ Supabase (via adminDb / service role) ├── Server Actions ──→ Validated with Zod, auth-guarded ├── API Routes ──→ /api/stripe/webhook, /api/pdf/[id] └── proxy.ts ──→ Auth session refresh + route protection Supabase ─── PostgreSQL (RLS enabled) + Auth (email/password + email confirmation) Stripe ─── Checkout, Customer Portal, Webhook (idempotent via stripe_events_processed) Sentry ─── Error tracking + Session Replay (authenticated users only, privacy-masked) ``` **请求流程:** 1. 匿名请求 → `proxy.ts` 检查 session;如果缺失则重定向至 `/login` 2. 已认证请求 → Server Component 通过 `adminDb()` 获取数据(service role,仅限服务器端) 3. 表单提交 → Server Action 通过 Zod 进行验证,检查身份认证,并通过 `adminDb()` 写入数据 4. 订阅检查 → `getMySubscription()` 结合 `React.cache()` — 每个请求内去重 5. PDF 导出 → `/api/pdf/[id]` 以 30 秒的渲染超时时间流式传输渲染好的 PDF **订阅层级:** - Free:最多 3 份报告,每份报告包含 10 个漏洞发现,无自定义模板,无 PDF 导出 - Pro (`status = 'active'`):无限报告和漏洞发现,支持自定义模板和 PDF 导出 - 状态通过以下事件从 Stripe 同步:`checkout.session.completed`、`customer.subscription.*`、`invoice.payment_failed` ## 项目结构 ``` src/ ├── app/ │ ├── (app)/ # Authenticated pages — dashboard, reports, settings, templates │ ├── (auth)/ # Login, signup, email confirmation │ ├── actions/ # Server Actions (findings, reports, templates, settings) │ └── api/ # Route handlers (Stripe webhook, PDF export) ├── components/ │ ├── findings/ # FindingForm, FindingCard │ ├── reports/ # ReportForm, ReportCard │ ├── pdf/ # React-PDF document layout │ ├── layout/ # AppShell, Sidebar, Header │ └── penpad/ # Design system (ui.tsx, tokens, icons) └── lib/ ├── db/ # Drizzle schema + generated types ├── supabase/ # Client helpers (browser / server / admin) ├── stripe.ts # Stripe singleton (server-only) ├── subscriptions.ts # getMySubscription() — cached, IDOR-safe └── validations.ts # Shared Zod schemas supabase/migrations/ # SQL migrations — applied in timestamp order by CI ``` ## 数据库 Schema | 表格 | 用途 | |---|---| | `reports` | 项目元数据(客户、范围、时间线、状态、所有者) | | `findings` | 每份报告的漏洞发现(CVSS、描述、影响、建议、证据) | | `subscriptions` | 从 Stripe 同步的订阅状态 | | `finding_templates` | 自定义可复用模板(仅限 Pro) | | `stripe_events_processed` | Webhook 幂等性日志 | 所有表格均已启用 RLS。所有用户数据表在移除 `auth.users` 时会级联删除。 ## 安全性 - 所有表格均启用 RLS — 用户只能访问自己的数据 - 所有 Server Actions 均使用 Zod 验证(长度限制、类型强制转换) - `admin.ts` 和 `stripe.ts` 使用 `server-only` 守卫 — service-role 密钥永远不会到达浏览器 - 每个 Stripe 事件都进行 Webhook HMAC 验证 + 幂等性去重 - Stripe 重定向验证 — 在跟随之前会检查 URL 是否匹配 `*.stripe.com` - `next.config.ts` 中配置了安全响应头(CSP、HSTS、X-Frame-Options、Permissions-Policy) - Sentry Session Replay 仅对已认证用户激活;所有文本均已掩码,屏蔽所有媒体 - 漏洞披露:`/.well-known/security.txt` ## 许可证 由 D4rkWolf Studios 开发。保留所有权利。
标签:PPID欺骗, Stripe, Supabase, 报告生成器, 测试用例, 自动化攻击