wahidhendrawan/VulnBoard
GitHub: wahidhendrawan/VulnBoard
VulnBoard 是一个自托管的漏洞管理与报告生成平台,帮助 VAPT 顾问将扫描器结果转化为符合主流安全框架的专业 PDF 报告。
Stars: 0 | Forks: 0
[](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, 安全仪表盘, 安全防御评估, 漏洞管理, 版权保护, 自动化攻击