wahidhendrawan/VulnBoard

GitHub: wahidhendrawan/VulnBoard

VulnBoard 是一个自托管的漏洞管理与报告生成平台,帮助 VAPT 顾问将扫描器结果转化为符合主流安全框架的专业 PDF 报告。

Stars: 0 | Forks: 0

[![CI](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/854c7867ad174259.svg)](https://github.com/wahidhendrawan/VulnBoard/actions/workflows/ci.yml) # VulnBoard – 专业 VAPT 报告与测试项目仪表板 一个专为 VAPT 顾问打造的自托管漏洞管理平台。支持生成跨多种安全框架的专业报告、管理测试项目、导入扫描器结果,以及导出可直接交付的 PDF——所有这些都具备身份验证和持久化存储功能。 ## 功能 | 类别 | 功能 | |---|---| | **框架** | OWASP Top 10 2021 (全部 10 项)、NIST CSF 2.0、ISO 27001:2022、PCI DSS 4.0、SANS/CWE Top 25 | | **模板** | 高管版、技术版、完整渗透测试版——提供英语和印尼语版本 | | **身份验证** | JWT + bcrypt——独立的顾问工作区 | | **持久化** | 通过 Prisma 使用 SQLite——所有测试项目、发现和报告在重启后依然保留 | | **PDF 导出** | 通过 Puppeteer 一键导出 PDF (无头 Chromium) | | **扫描器导入** | Burp Suite XML、OWASP ZAP JSON、Nmap XML | | **漏洞库** | 40+ 个可复用的发现模板 (英文 + 印尼文),支持按类别搜索 | | **白标定制** | 每个测试项目可独立配置 Logo URL 和品牌颜色 | | **多语言** | 支持英语和印尼语的报告 | | **Docker** | 完全容器化并配备持久化卷 | ## 快速开始 (Docker Compose) ``` cp .env.example .env # 编辑 .env — 设置一个强健的 JWT_SECRET docker compose up -d ``` - 前端: http://localhost:5173 - 后端 API: http://localhost:4000 **初始化演示数据 (可选):** ``` docker compose exec backend npm run db:seed # Demo 登录:demo@vulnboard.local / demo1234 ``` ## 开发环境配置 ### 后端 ``` cd backend cp .env.example .env npm install npx prisma migrate dev --name init npm run db:seed # optional: seed finding templates + demo user npm run dev ``` ### 前端 ``` cd frontend npm install npm run dev ``` ## 架构 ``` VulnBoard/ ├── docker-compose.yml # Orchestration (backend + frontend + volumes) ├── .env.example # Environment variables template ├── backend/ │ ├── Dockerfile │ ├── prisma/ │ │ └── schema.prisma # User, Engagement, Finding, Report, FindingTemplate │ └── src/ │ ├── server.ts # Express app entry │ ├── db.ts # Prisma singleton │ ├── schemas.ts # Zod validation schemas │ ├── middleware/ │ │ └── auth.ts # JWT middleware │ ├── routes/ │ │ ├── auth.ts # POST /register, /login │ │ ├── engagements.ts │ │ ├── reports.ts # Generate + persist report │ │ ├── pdf.ts # GET /reports/:id/pdf │ │ ├── scanner.ts # POST /burp, /zap, /nmap │ │ ├── findingTemplates.ts │ │ ├── frameworks.ts │ │ └── templates.ts │ ├── services/ │ │ └── reportGenerator.ts # Markdown generation engine │ ├── parsers/ │ │ ├── burp.ts # Burp Suite XML parser │ │ ├── zap.ts # OWASP ZAP JSON parser │ │ └── nmap.ts # Nmap XML parser │ ├── data/ │ │ ├── frameworks.ts # 5 frameworks, 67+ controls │ │ ├── templates.ts # 8 report templates (EN + ID) │ │ └── findingTemplates.ts # 40 reusable finding templates │ └── seed.ts # DB seeder └── frontend/ ├── Dockerfile # Multi-stage: Vite build → nginx ├── nginx.conf # SPA routing + API proxy └── src/ ├── api.ts # Typed API client (axios + interceptors) ├── AuthContext.tsx # Auth state management ├── ProtectedRoute.tsx ├── App.tsx # Router + layout ├── pages/ │ ├── Login.tsx │ └── Register.tsx └── components/ └── SeverityBadge.tsx ``` ## API 参考 | 方法 | Endpoint | 身份验证 | 描述 | |---|---|---|---| | POST | `/api/auth/register` | 否 | 创建账户 | | POST | `/api/auth/login` | 否 | 获取 JWT token | | GET | `/api/frameworks` | 否 | 列出框架 | | GET | `/api/templates?frameworkId=` | 否 | 列出模板 | | GET | `/api/engagements` | 是 | 列出用户测试项目 | | POST | `/api/engagements` | 是 | 创建测试项目 | | GET | `/api/engagements/:id` | 是 | 获取测试项目及发现 | | DELETE | `/api/engagements/:id` | 是 | 删除测试项目 | | POST | `/api/reports` | 是 | 生成并保存报告 | | GET | `/api/reports/:id/pdf` | 是 | 下载 PDF | | POST | `/api/scanner/burp` | 是 | 导入 Burp XML | | POST | `/api/scanner/zap` | 是 | 导入 ZAP JSON | | POST | `/api/scanner/nmap` | 是 | 导入 Nmap XML | | GET | `/api/finding-templates` | 否 | 列出发现模板 | ## 持久化卷 | 卷名 | 容器内路径 | 内容 | |---|---|---| | `db_data` | `/app/data/vulnboard.db` | SQLite 数据库 | | `reports_data` | `/app/data/reports/` | 生成的 PDF 文件 | ## 环境变量 | 变量 | 默认值 | 描述 | |---|---|---| | `JWT_SECRET` | `change-me` | **在生产环境中务必修改** —— JWT 签名密钥 | | `DATABASE_URL` | `file:/app/data/vulnboard.db` | Prisma SQLite 路径 | | `ALLOWED_ORIGIN` | `http://localhost:5173` | CORS 允许的源 | | `PORT` | `4000` | 后端端口 | | `VITE_API_BASE` | `http://localhost:4000/api` | 前端 API 基础地址 (构建时) | ## 技术栈 - **后端**: Node.js 20 · Express · TypeScript · Prisma ORM · SQLite - **身份验证**: JWT (`jsonwebtoken`) + bcryptjs - **校验**: Zod - **PDF**: Puppeteer (无头 Chromium,已预装于 Docker) - **前端**: React 18 · Vite · TypeScript · react-router-dom · axios - **容器化**: Docker Compose · nginx (前端) · node:20-slim (后端)
标签:Docker, GPT, JWT, MITM代理, Prisma, 安全仪表盘, 安全防御评估, 漏洞管理, 版权保护, 自动化攻击