一个轻量级的 Web 安全众测平台后端,基于 Golang + Gin + GORM + MySQL 构建。
- ✅ 用户认证系统 - JWT 认证,支持用户注册/登录
- ✅ 漏洞报告管理 - 完整的 CRUD 操作,支持分页查询,关联项目和漏洞类型
- ✅ 项目管理 - 项目资料管理,支持项目创建、查看、更新、删除
- ✅ 系统配置管理 - 通用配置表设计,支持漏洞类型等各类配置
- ✅ 文件上传 - 支持文件上传功能,用于报告附件等
- ✅ 用户信息变更 - 信息变更申请流程,支持后台审核
- ✅ 角色权限管理 - 白帽子/厂商/管理员三种角色
- ✅ 数据库迁移 - 基于 GORM 的自动迁移工具,支持表注释和字段注释
- ✅ 统一响应格式 - 标准化的 API 响应结构
- ✅ CORS 支持 - 跨域资源共享配置
- ✅ Clean Architecture - 清晰的分层架构设计
| 技术 | 版本 | 说明 |
|---|---|---|
| 语言 | Go 1.21+ | 编程语言 |
| Web框架 | Gin | HTTP Web 框架 |
| 数据库 | MySQL 5.7+ | 关系型数据库 |
| ORM | GORM | Go 对象关系映射 |
| 配置管理 | Viper | 配置文件加载 |
| 认证 | JWT | JSON Web Token 认证 |
| 架构 | Clean Architecture | 分层架构设计 |
- Go 1.21 或更高版本
- MySQL 5.7+ 或 MySQL 8.0+
- Make(可选,用于运行 Makefile 命令)
git clone <repository-url>
cd bug-bounty-litego mod download# macOS (Homebrew)
brew install mysql
brew services start mysql
# 或使用 Docker
docker run -d --name mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
-p 3306:3306 \
mysql:8
# 创建数据库
mysql -u root -p123456 -e "CREATE DATABASE bugbounty CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"创建 docker-compose.yml 文件:
version: '3.8'
services:
mysql:
image: mysql:8
container_name: bugbounty-mysql
environment:
MYSQL_ROOT_PASSWORD: 123456
MYSQL_DATABASE: bugbounty
ports:
- "3306:3306"
volumes:
- mysql_data:/var/lib/mysql
volumes:
mysql_data:启动数据库:
docker-compose up -d复制配置文件模板:
cp config/config.yaml.example config/config.yaml编辑 config/config.yaml,修改数据库连接信息:
database:
dsn: "root:123456@tcp(localhost:3306)/bugbounty?charset=utf8mb4&parseTime=True&loc=Local"# 执行数据库迁移(创建表结构)
make migrate
# 初始化系统必需数据(危害等级等)
make init
# (可选)填充测试数据
make seed-projects # 生成测试项目
make seed-users # 生成测试用户
make seed-reports # 生成测试报告
# 或一键填充所有测试数据
make seed-all方式一:直接运行(不执行迁移)
make run方式二:运行并执行数据库迁移
make run-migrate服务启动后,访问: http://localhost:8080
# 测试健康检查(如果有的话)
curl http://localhost:8080/api/v1/health
# 测试用户注册
curl -X POST http://localhost:8080/api/v1/auth/register \
-H "Content-Type: application/json" \
-d '{"username":"test","password":"123456"}'bug-bounty-lite/
├── cmd/ # 应用程序入口
│ ├── server/ # HTTP 服务入口
│ │ └── main.go
│ ├── migrate/ # 数据库迁移工具
│ │ └── main.go
│ ├── init/ # 系统初始化数据工具
│ │ └── main.go
│ ├── seed-projects/ # 项目测试数据填充工具
│ │ └── main.go
│ ├── seed-users/ # 用户测试数据填充工具
│ │ └── main.go
│ └── seed-reports/ # 漏洞报告测试数据填充工具
│ └── main.go
├── config/ # 配置文件
│ ├── config.yaml # 配置文件(需自行创建)
│ └── config.yaml.example # 配置模板
├── internal/ # 内部代码(不对外暴露)
│ ├── domain/ # 领域模型和接口
│ │ ├── user.go
│ │ ├── report.go
│ │ ├── project.go
│ │ ├── system_config.go
│ │ └── user_info_change.go
│ ├── handler/ # HTTP 处理器层
│ │ ├── user_handler.go
│ │ ├── report_handler.go
│ │ ├── project_handler.go
│ │ ├── system_config_handler.go
│ │ ├── upload_handler.go
│ │ └── user_info_change_handler.go
│ ├── middleware/ # 中间件
│ │ ├── auth.go # JWT 认证中间件
│ │ ├── cors.go # CORS 中间件
│ │ └── logger.go # 日志中间件
│ ├── repository/ # 数据访问层
│ │ ├── user_repo.go
│ │ ├── report_repo.go
│ │ ├── project_repo.go
│ │ ├── system_config_repo.go
│ │ └── user_info_change_repo.go
│ ├── router/ # 路由配置
│ │ └── router.go
│ └── service/ # 业务逻辑层
│ ├── user_service.go
│ ├── report_service.go
│ ├── project_service.go
│ ├── system_config_service.go
│ └── user_info_change_service.go
├── pkg/ # 可复用的公共包
│ ├── config/ # 配置加载
│ ├── database/ # 数据库连接
│ ├── jwt/ # JWT 认证
│ ├── migrate/ # 迁移工具
│ ├── response/ # 统一响应格式
│ └── upload/ # 文件上传工具
├── Dockerfile # Docker 镜像构建文件
├── Makefile # 构建脚本
├── go.mod # Go 模块依赖
├── go.sum # Go 模块校验和
├── README.md # 项目说明文档
├── API.md # API 接口文档
└── DATABASE.md # 数据库文档
项目采用 Clean Architecture(清洁架构) 设计,分为以下层次:
- Handler 层 - HTTP 请求处理,参数验证
- Service 层 - 业务逻辑处理
- Repository 层 - 数据访问,数据库操作
- Domain 层 - 领域模型和接口定义
配置文件位于 config/config.yaml:
server:
port: ":8080" # 服务端口
mode: "debug" # 运行模式: debug/release
database:
dsn: "root:password@tcp(localhost:3306)/bugbounty?charset=utf8mb4&parseTime=True&loc=Local"
max_idle: 10 # 最大空闲连接数
max_open: 100 # 最大打开连接数
jwt:
secret: "your-secret-key-here" # JWT 密钥(请修改为复杂字符串)
expire: 7200 # Token 过期时间(秒,默认2小时)可以通过环境变量覆盖配置(需要修改配置加载代码):
export SERVER_PORT=:8080
export DB_DSN="root:password@tcp(localhost:3306)/bugbounty?charset=utf8mb4&parseTime=True&loc=Local"
export JWT_SECRET="your-secret-key"详细的 API 文档请参考 API.md
POST /api/v1/auth/register- 用户注册POST /api/v1/auth/login- 用户登录
POST /api/v1/reports- 提交漏洞报告(支持项目关联、漏洞类型等新字段)GET /api/v1/reports- 获取报告列表(支持关联查询)GET /api/v1/reports/:id- 获取报告详情PUT /api/v1/reports/:id- 更新报告
POST /api/v1/projects- 创建项目(仅admin)GET /api/v1/projects- 获取项目列表GET /api/v1/projects/:id- 获取项目详情PUT /api/v1/projects/:id- 更新项目(仅admin)DELETE /api/v1/projects/:id- 删除项目(仅admin)
GET /api/v1/configs/:type- 获取配置列表(如:/configs/vulnerability_type)GET /api/v1/configs/:type/:id- 获取配置详情POST /api/v1/configs/:type- 创建配置(仅admin)PUT /api/v1/configs/:type/:id- 更新配置(仅admin)DELETE /api/v1/configs/:type/:id- 删除配置(仅admin)
POST /api/v1/upload- 上传文件(单文件,最大10MB)
POST /api/v1/user/info/change- 提交信息变更申请GET /api/v1/user/info/changes- 获取变更申请列表GET /api/v1/user/info/changes/:id- 获取变更申请详情
详细的数据库文档请参考 DATABASE.md
users- 用户表reports- 漏洞报告表projects- 项目表system_configs- 系统配置表user_info_change_requests- 用户信息变更申请表
# 运行项目(不迁移)
make run
# 运行项目(先迁移)
make run-migrate
# 执行数据库迁移
make migrate
# 查看迁移状态
make migrate-status
# 初始化系统数据(危害等级等)
make init
# 强制初始化系统数据
make init-force
# 填充项目测试数据
make seed-projects
# 强制填充项目测试数据
make seed-projects-force
# 填充用户测试数据
make seed-users
# 强制填充用户测试数据
make seed-users-force
# 填充报告测试数据
make seed-reports
# 强制填充报告测试数据
make seed-reports-force
# 一键填充所有测试数据
make seed-all
# 编译项目
make build
# 运行测试
make test
# 构建 Docker 镜像
make docker-build
# 运行 Docker 容器
make docker-run
# 查看所有命令
make help项目使用 GORM 的 AutoMigrate 功能进行数据库迁移:
# 执行迁移
make migrate
# 查看迁移状态
make migrate-status迁移会自动创建以下表结构:
users- 用户表reports- 漏洞报告表projects- 项目表system_configs- 系统配置表user_info_change_requests- 用户信息变更申请表
项目提供了数据初始化和测试数据填充工具:
# 初始化系统必需数据(危害等级等配置)
make init
# 填充测试数据(开发/测试环境使用)
make seed-projects # 填充项目测试数据
make seed-users # 填充用户测试数据
make seed-reports # 填充报告测试数据
# 一键填充所有测试数据
make seed-all建议的初始化顺序:
make migrate # 1. 数据库迁移(创建表结构)
make init # 2. 初始化系统数据(危害等级等)
make seed-projects # 3. 填充项目测试数据(可选)
make seed-users # 4. 填充用户测试数据(可选)
make seed-reports # 5. 填充报告测试数据(可选)
# 或者使用一键命令
make migrate && make init && make seed-all系统初始化数据包含:
- 危害等级配置(无危害、低危、中危、高危、严重)
测试用户账号:
| 用户名 | 密码 | 角色 | 姓名 |
|---|---|---|---|
| whitehat_zhang | password123 | 白帽子 | 张三 |
| whitehat_li | password123 | 白帽子 | 李四 |
| whitehat_wang | password123 | 白帽子 | 王五 |
| whitehat_zhao | password123 | 白帽子 | 赵六 |
| whitehat_chen | password123 | 白帽子 | 陈七 |
| vendor_test | password123 | 厂商 | 测试厂商 |
| admin_test | admin123 | 管理员 | 测试管理员 |
- 用户注册/登录 - 获取 JWT Token
- 访问受保护接口 - 在请求头中携带 Token:
Authorization: Bearer <token>
- 用户提交信息变更申请(手机号/邮箱/姓名)
- 申请状态为
pending(待审核) - 后台管理员审核通过后,状态变为
approved,并更新用户信息 - 审核拒绝后,状态变为
rejected
| 角色 | 说明 | 权限 |
|---|---|---|
| whitehat | 白帽子(默认) | 提交报告、查看报告、更新自己的报告 |
| vendor | 厂商 | 查看报告、更新报告状态 |
| admin | 管理员 | 所有权限 |
- 代码规范: 遵循 Go 官方代码规范
- 错误处理: 使用统一的错误响应格式
- 日志记录: 使用中间件记录请求日志
- 测试: 编写单元测试和集成测试
- 文档: 及时更新 API 文档和代码注释
make docker-build或手动构建:
docker build -t bug-bounty-lite:latest .make docker-run或手动运行:
docker run -d \
--name bug-bounty-lite \
-p 8080:8080 \
-v $(pwd)/config:/app/config \
bug-bounty-lite:latest-
配置管理
- 使用环境变量或配置中心管理敏感信息
- 不要在代码中硬编码密钥
-
数据库
- 使用连接池优化数据库连接
- 定期备份数据库
-
安全
- 使用 HTTPS
- 设置强密码策略
- 定期更新依赖包
-
监控
- 添加日志收集(如 ELK)
- 添加性能监控(如 Prometheus)
- 设置告警机制
-
高可用
- 使用负载均衡
- 数据库主从复制
- 容器编排(Kubernetes)
MIT License
欢迎提交 Issue 和 Pull Request!
如有问题或建议,请通过 Issue 反馈。
版本: 2.1.0
最后更新: 2024-12
新增功能:
- ✅ 测试数据生成工具分离
make seed-users- 生成测试用户(5个白帽子 + 1个厂商 + 1个管理员)make seed-reports- 生成漏洞报告测试数据(16条不同类型的报告)make seed-all- 一键生成所有测试数据
- ✅ 漏洞报告测试数据覆盖多种场景
- 多种漏洞类型(SQL注入、XSS、CSRF、越权等)
- 多种状态(待审核、已确认、已修复、已关闭)
- 多种危害等级(Critical、High、Medium、Low)
新增功能:
- ✅ 项目管理功能(项目创建、查看、更新、删除)
- ✅ 系统配置管理(通用配置表,支持漏洞类型等配置)
- ✅ 文件上传功能(支持PDF、图片、文档等格式)
- ✅ 报告功能扩展(项目关联、漏洞类型配置、附件上传等)
改进:
- ✅ 数据库表注释和字段注释完善
- ✅ 报告实体扩展,支持更多字段
- ✅ 统一响应格式(成功响应 code 统一为 200)