Skip to content

xiaoming1995/bug-bounty-lite

Repository files navigation

Bug Bounty Lite

一个轻量级的 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 命令)

1. 克隆项目

git clone <repository-url>
cd bug-bounty-lite

2. 安装依赖

go mod download

3. 配置数据库

方式一:使用本地 MySQL

# 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(推荐)

创建 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

4. 配置文件

复制配置文件模板:

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"

5. 初始化数据库

# 执行数据库迁移(创建表结构)
make migrate

# 初始化系统必需数据(危害等级等)
make init

# (可选)填充测试数据
make seed-projects   # 生成测试项目
make seed-users      # 生成测试用户
make seed-reports    # 生成测试报告

# 或一键填充所有测试数据
make seed-all

6. 运行项目

方式一:直接运行(不执行迁移)

make run

方式二:运行并执行数据库迁移

make run-migrate

服务启动后,访问: http://localhost:8080

7. 验证安装

# 测试健康检查(如果有的话)
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(清洁架构) 设计,分为以下层次:

  1. Handler 层 - HTTP 请求处理,参数验证
  2. Service 层 - 业务逻辑处理
  3. Repository 层 - 数据访问,数据库操作
  4. 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 文档请参考 API.md

主要 API 端点

认证相关

  • 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 管理员 测试管理员

认证流程

  1. 用户注册/登录 - 获取 JWT Token
  2. 访问受保护接口 - 在请求头中携带 Token:
    Authorization: Bearer <token>
    

用户信息变更流程

  1. 用户提交信息变更申请(手机号/邮箱/姓名)
  2. 申请状态为 pending(待审核)
  3. 后台管理员审核通过后,状态变为 approved,并更新用户信息
  4. 审核拒绝后,状态变为 rejected

角色权限

角色 说明 权限
whitehat 白帽子(默认) 提交报告、查看报告、更新自己的报告
vendor 厂商 查看报告、更新报告状态
admin 管理员 所有权限

开发建议

  1. 代码规范: 遵循 Go 官方代码规范
  2. 错误处理: 使用统一的错误响应格式
  3. 日志记录: 使用中间件记录请求日志
  4. 测试: 编写单元测试和集成测试
  5. 文档: 及时更新 API 文档和代码注释

🐳 部署

Docker 部署

1. 构建镜像

make docker-build

或手动构建:

docker build -t bug-bounty-lite:latest .

2. 运行容器

make docker-run

或手动运行:

docker run -d \
  --name bug-bounty-lite \
  -p 8080:8080 \
  -v $(pwd)/config:/app/config \
  bug-bounty-lite:latest

生产环境建议

  1. 配置管理

    • 使用环境变量或配置中心管理敏感信息
    • 不要在代码中硬编码密钥
  2. 数据库

    • 使用连接池优化数据库连接
    • 定期备份数据库
  3. 安全

    • 使用 HTTPS
    • 设置强密码策略
    • 定期更新依赖包
  4. 监控

    • 添加日志收集(如 ELK)
    • 添加性能监控(如 Prometheus)
    • 设置告警机制
  5. 高可用

    • 使用负载均衡
    • 数据库主从复制
    • 容器编排(Kubernetes)

📝 许可证

MIT License

🤝 贡献

欢迎提交 Issue 和 Pull Request!

📞 联系方式

如有问题或建议,请通过 Issue 反馈。


版本: 2.1.0
最后更新: 2024-12

📝 更新日志

v2.1.0 (2024)

新增功能:

  • ✅ 测试数据生成工具分离
    • make seed-users - 生成测试用户(5个白帽子 + 1个厂商 + 1个管理员)
    • make seed-reports - 生成漏洞报告测试数据(16条不同类型的报告)
    • make seed-all - 一键生成所有测试数据
  • ✅ 漏洞报告测试数据覆盖多种场景
    • 多种漏洞类型(SQL注入、XSS、CSRF、越权等)
    • 多种状态(待审核、已确认、已修复、已关闭)
    • 多种危害等级(Critical、High、Medium、Low)

v2.0.0 (2024)

新增功能:

  • ✅ 项目管理功能(项目创建、查看、更新、删除)
  • ✅ 系统配置管理(通用配置表,支持漏洞类型等配置)
  • ✅ 文件上传功能(支持PDF、图片、文档等格式)
  • ✅ 报告功能扩展(项目关联、漏洞类型配置、附件上传等)

改进:

  • ✅ 数据库表注释和字段注释完善
  • ✅ 报告实体扩展,支持更多字段
  • ✅ 统一响应格式(成功响应 code 统一为 200)

About

web安全平台

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published