ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Bug Bounty Platform(漏洞赏金平台)全解析:基于 FastAPI + React 19 的生产级漏洞报告与处置系统

Bug Bounty Platform(漏洞赏金平台)全解析:基于 FastAPI + React 19 的生产级漏洞报告与处置系统 【免费下载链接】Cybersecurity-ProjectsBuilding 70 Projects ranging from beginner to advanced so anyone can — learn from, build upon, use as a reference, or even copy directly. Gamified Cybersecurity learning 项目地址https://gitcode.com/gh_mirrors/cy/Cybersecurity-Projects点击查看免费下载本篇技术指南围绕 Cybersecurity-Projects 仓库中的PROJECTS/advanced/bug-bounty-platform展开从 README 快速入门出发系统讲解这套可生产部署的企业级漏洞赏金平台的能力定位、容器化启动方式、前后端技术栈并结合仓库内 learn 学习模块 与后端源码深入拆解其分层架构、数据库设计、JWT 双令牌认证、RBAC 授权与 CVSS 报告分诊工作流。读完你既能用docker compose up -d一键拉起整套环境也能掌握从零实现一个带角色权限、奖金阶梯与 SLA 追踪的漏洞众测平台所需的全部关键技术决策。平台定位与核心能力README 将该项目定位为production-ready enterprise bug bounty platform即一套面向企业级场景的漏洞赏金Bug Bounty托管平台其核心能力可以归纳为六个方面基于角色的访问控制RBAC为研究员Researcher、企业Company与管理员Admin三类角色提供独立权限边界认证基于 JWT并配套 refresh token 轮换机制CVSS 漏洞评分支持完整的报告分诊triage与赏金发放bounty award工作流项目Program管理企业可配置测试范围scope、奖励阶梯reward tiers与响应 SLA 追踪多设备会话管理通过 token versioning令牌版本号实现一次性全端下线、即时失效全链路防护所有端点均内置限流、审计日志与输入校验仓储模式与严格类型安全后端采用 Repository 分层模式配合 mypy / ty 做静态类型检查后端代码量约 7,000 行。项目整体采用**模块化单体Modular Monolith**架构单数据库保证跨实体 ACID 事务若未来规模扩大各领域模块user、auth、program、report、admin也可按需拆分独立服务。这一取舍在 ARCHITECTURE.md 中有明确阐述。快速开始容器化一键启动README 给出的启动方式极其简洁docker compose up -d启动后访问http://localhost:8420即可进入 Web 界面。仓库根目录的 compose.yml 定义了完整的生产编排包含五个服务服务说明关键端口/配置nginx反向代理 前端静态资源宿主机${NGINX_HOST_PORT:-8420}:80依赖 backend 健康检查backendFastAPI 后端infra/docker/fastapi.prod构建容器内暴露8000带/health健康检查dbPostgreSQL 18postgres:18-alpine${POSTGRES_HOST_PORT:-3420}:5432pg_isready健康检查redisRedis 7会话缓存与限流${REDIS_HOST_PORT:-6420}:6379--appendonly yes持久化cloudflaredCloudflare Tunnel可选需配置${CLOUDFLARE_TUNNEL_TOKEN}compose 文件对每个服务都声明了 CPU/内存deploy.resources.limits并全部设置restart: unless-stopped体现出生产级编排的严谨度。nginx 服务通过depends_on: backend: condition: service_healthy等待后端就绪backend 同样等待 db 与 redis 健康后再启动避免依赖竞态。使用 just 命令运行器README 特别提示项目使用just将常用操作分组管理# Docker生产 just up # docker compose up just start # docker compose up -d just logs # docker compose logs -f just down # docker compose down # 开发环境 just dev-up # docker compose -f dev.compose.yml up just dev-start # docker compose -f dev.compose.yml up -d # 数据库迁移 just migrate head # docker compose exec backend alembic upgrade just migration Add field # alembic revision --autogenerate -m just rollback # alembic downgrade -1 # 质量保障 just ci # lint typecheck test just test-cov # pytest --covjustfile还覆盖了前后端独立的 lint/类型检查命令ruff、pylint、mypy、biome、stylelint、tsc并在文件头部通过set dotenv-load自动加载.env。README 中建议通过curl -sSf https://just.systems/install.sh | bash -s -- --to ~/.local/bin安装 just。技术栈全景README 明确定义了前后端技术选型后端FastAPI、SQLAlchemy 2.0、PostgreSQL 18、Redis 7、Alembic、Argon2id、JWT前端React 19、TypeScript 5.9、Vite 7、React Router 7.1、TanStack Query v5、Zustand选择理由在 ARCHITECTURE.md 中有系统对比FastAPI 胜在 async/await 原生支持、Pydantic 内建校验与自动 OpenAPI 文档PostgreSQL 胜在 ACID 事务与 JSON 索引能力React TypeScript 胜在生态成熟与行业采纳度Zustand 相比 Redux 大幅减少样板代码且内建持久化TanStack Query 相比 SWR 功能更完整并支持分页。系统架构与数据流高层架构Client Browser (React TypeScript SPA) │ HTTPS ▼ Nginx静态资源 /api/* 反代 Gzip 安全头 │ ▼ FastAPI Backend ◄────► Redis会话、限流 │ ▼ PostgreSQL 18UUID v7 主键、ACID该拓扑图出自 ARCHITECTURE.md。选择 Nginx 的理由包括生产级反向代理、静态文件服务、Gzip 压缩、SSL 终止以及水平扩展时的负载均衡Redis 则承担快速内存缓存与会话数据使限流不必直接打到 PostgreSQL。后端分层架构Layered Architecture后端遵循严格的四层架构自上而下单向依赖禁止跨层直连RoutesAPI 层→ Services业务逻辑层→ Repositories数据访问层→ ModelsORM 实体仓库中的实际目录结构印证了这一点backend/app/下包含user/、auth/、program/、report/、admin/等自包含领域模块每个模块内部分别放置models.py、repository.py、schemas.py、routes.py、service.py、exceptions.py公共能力集中在backend/app/core/Base.py、base_repository.py、database.py、security.py、dependencies.py、rate_limit.py、logging.py等应用装配入口为 backend/app/factory.py。以一次用户登录为例请求会依次穿过这四层详见 ARCHITECTURE.mdRoute 层auth/routes.py中POST /api/v1/auth/login用LoginRequestPydantic 模型校验输入通过Depends()注入数据库会话Service 层authenticate_user()依次完成按邮箱查用户 → Argon2id 校验密码 → 签发 access/refresh 双令牌 → 将 refresh token 哈希落库含设备信息→ commit并抛出领域异常InvalidCredentialsErrorRepository 层UserRepository.find_by_email()仅负责构造 SQLAlchemy 查询并返回 ORM 对象不含任何业务规则Model 层users表模型定义字段与refresh_tokens的一对多关系。分层带来的收益是明确的更换数据库只需改 Repository修改业务规则只动 Service调整 API 格式只碰 Routes 与 Schemas且每一层都能被独立 mock 测试。前端架构与状态管理前端采用 React 组件化 文件路由React Router 7frontend/src/routes/下以目录结构映射 URL例如programs/[slug]/page.tsx对应/programs/:slugcompany/目录通过layout.tsx共享企业端嵌套布局。状态管理采用双轨混合策略见 ARCHITECTURE.md服务端状态交给 TanStack QueryAPI 数据用户、项目、报告自动缓存、窗口聚焦自动重取、请求去重staleTime控制新鲜度客户端状态交给 ZustandUI 开关、表单状态、持久化到 localStorage 的认证令牌无需 Provider 包裹且只在状态变化组件上触发重渲染。frontend/src/api/index.ts中的 Axios 实例在请求拦截器中自动附加Authorization: Bearer access_token响应拦截器捕获 401 后自动携带 refresh token 调用/auth/refresh续签续签失败则清理本地令牌并跳转登录页——这是前端对双令牌体系的直接配合。数据库设计9 张核心表与关键模式数据库部分由 DATABASE.md 系统讲解平台在 PostgreSQL 18 上共设计 9 张表表用途users用户账户研究员、企业、管理员共用单表refresh_tokensJWT 刷新令牌存 SHA-256 哈希programs漏洞赏金项目slug、status、visibility、SLAassets项目测试范围web/api/mobile/otherreward_tiers按严重级别定义赏金金额reports漏洞提交双严重级别、CVSS、CWE、重复关联comments报告沟通含is_internal企业内部备注attachments漏洞利用证明文件仅存元数据文件在对象存储UUID v7 主键时间可排序 全局唯一项目放弃自增 ID 与 UUID v4改用UUID v7前 48 位是毫秒级 Unix 时间戳天然支持ORDER BY id按时间排序且对数据库索引友好剩余位随机保证全局唯一与不可枚举。后端通过uuid_utils库生成DATABASE.mdimport uuid_utils as uuid user_id uuid.uuid7() # 018d3f54-8c3a-7000-a234-56789abcdef0SafeEnum存值不存名SQLAlchemy 默认枚举会把 Python 枚举的名字如ACTIVE写入数据库一旦重命名枚举成员就会破坏既有数据。项目采用 SafeEnum 模式存储枚举值而非名称active从而允许安全重命名class Status(SafeEnum): RUNNING active # 值仍是 active数据库不受影响 PAUSED paused删除策略与级联设计外键大量使用ON DELETE CASCADE删用户连带删其 refresh tokens 与报告删项目连带删报告reports.duplicate_of_id自引用外键采用ON DELETE SET NULL——原报告被删时重复报告可独立存续用户账户遵循 GDPR 做硬删除停用账号则通过is_active false实现而非软删除详见 DATABASE.md。防止 N1 查询所有relationship设置lazyraise任何隐式惰性加载都会直接抛错强制开发者在查询时显式使用selectinload()预加载关联从机制上杜绝 N1 问题DATABASE.mdstmt ( select(Report) .where(Report.id report_id) .options( selectinload(Report.comments), selectinload(Report.attachments), ) )报告状态工作流reports.status定义了完整的分诊生命周期NEW → TRIAGING → NEEDS_MORE_INFO → TRIAGING ↓ ACCEPTED → RESOLVED → DISCLOSED ↓ DUPLICATE / NOT_APPLICABLE / INFORMATIVE配合severity_submitted研究员自评与severity_final企业终评双字段兼顾透明与纠偏cvss_score0.0–10.0与cwe_id如 CWE-79 XSS提供行业标准的漏洞量化口径triaged_at、resolved_at、disclosed_at时间戳记录报告全生命周期DATABASE.md。安全体系多层级纵深防御安全模块由 SECURITY.md 完整展开核心思想是纵深防御——五层防护环环相扣输入校验所有请求先经 Pydantic 做类型检查、字符串长度限制与 Email/URL 格式校验认证JWT15 分钟短效 access token 7 天长效 refresh token授权RBAC角色控制 资源归属校验 仅管理员可用的端点限流默认 100 req/min认证端点收紧为 20 req/min按 IP 追踪安全存储Argon2id 密码哈希、refresh token 以 SHA-256 哈希落库、密钥存环境变量。双令牌与令牌轮换access token 无状态、无法撤销因此做成 15 分钟短效以缩小被盗窗口refresh token 存数据库、可撤销7 天有效期且每次刷新即轮换旧令牌删除、新令牌生成保证单次使用。若攻击者重放已被删除的令牌系统通过family_id轮换链检测到复用立即注销该用户全部设备令牌并报警——这被称为 token rotation attack detectionSECURITY.md。令牌版本号Token Versioning用户表维护token_version字段签发 access token 时写入载荷认证依赖在比对数据库当前版本if user.token_version ! payload[token_version]: raise UnauthorizedError(Token invalidated)当用户改密、上报令牌失窃或管理员重置会话时执行user.token_version 1全部存量 access token 立即失效——无需维护黑名单SECURITY.md。仓库中的认证依赖实现在 backend/app/core/dependencies.pyget_current_user密码哈希与令牌签发在 backend/app/core/security.py。Argon2id 密码哈希密码使用 2015 年密码哈希竞赛冠军 Argon2id内存密集型设计使其对 GPU/ASIC 并行破解成本极高且具备恒定时间比较属性天然抵御时序攻击。典型哈希串为$argon2id$v19$m65536,t3,p4$salt$hash64 MiB 内存、3 次迭代、4 线程并行。密码策略通过 Pydantic 强制8–128 位须含大写、小写与数字SECURITY.md。漏洞防护清单攻击类型防护手段SQL 注入SQLAlchemy 参数化查询禁止字符串拼接XSSReact 默认转义Markdown 渲染经bleach.clean白名单清洗CSRFJWT 走Authorization头而非 Cookie跨域无法自动携带IDOR接口内显式校验资源归属研究员本人 / 项目所属企业 / 管理员暴力破解认证端点 20 req/min 限流枚举泄露登录失败统一返回Invalid credentials不区分用户是否存在其中 IDOR 防护示例SECURITY.md展示了报告详情接口的三重归属判断可直接作为编写资源级授权代码的模板。Nginx 侧还应配置X-Frame-Options、Content-Security-Policy等安全响应头。设计模式从仓储到工厂PATTERNS.md 系统总结了平台落地的主要设计模式这些模式在源码中均有对应实现依赖注入Dependency InjectionFastAPI 原生Depends()实现。仓库中backend/app/core/dependencies.py的get_current_user就是典型——路由只需声明user: CurrentUserAnnotated[User, Depends(get_current_user)]认证逻辑自动注入路由内零重复仓储模式Repository Patternbackend/app/core/base_repository.py提供泛型BaseRepository[ModelT]统一get_by_id/get_all/create/deleteUserRepository(BaseRepository[User])等子类只追加领域方法如find_by_email实现数据访问与业务逻辑解耦、便于 mock 测试工厂模式Factory Patternbackend/app/factory.py的create_app()集中装配中间件CORS、限流、注册auth/user/program/report/admin五个路由前缀/api/v1/...便于创建多个应用实例以支持不同环境的测试策略模式Strategy Pattern密码哈希抽象为PasswordHasher接口Argon2Hasher/BcryptHasher可互换业务代码不感知具体算法单例模式SingletonDatabaseSessionManager保证全局唯一连接池与 session 工厂Mixin 模式backend/app/core/Base.py中UUIDMixin、TimestampMixin、SoftDeleteMixin组合进各模型DRY 复用id/created_at/updated_at观察者模式Pub/SubEventBus解耦事件生产者与消费者如report.submitted同时触发通知企业、更新统计、记录日志。GETTING-STARTED.md的Combining Patterns一节还演示了这些模式如何在同一注册流程中协同RouteDI 注入 session→ Service仓储模式 策略模式哈希 观察者模式发布事件→ Repository泛型仓储。从零搭建依赖、配置与迁移实操GETTING-STARTED.md 以手把手方式讲解了从空目录搭建同款平台的完整过程以下是其核心实操骨架。后端依赖清单pyproject.toml依赖用途fastapi0.123.0现代异步 Web 框架sqlalchemy2.0.0异步 ORMasyncpg0.30.0异步 PostgreSQL 驱动alembic1.15.0数据库迁移pydantic2.0.0/pydantic-settings2.7.0数据校验与配置加载pyjwt2.10.0JWT 令牌pwdlib[argon2]0.2.0Argon2id 密码哈希uuid-utils0.10.0UUID v7 支持python-multipart0.0.20文件上传解析dev 组额外包含ruff、mypy、pytest、pytest-asyncio。前端在 Vite react-ts 模板基础上追加react-router-dom、tanstack/react-query、zustand、axios、zod、sass、biome。配置管理Pydantic Settings仓库backend/app/config.py对应以下模式Settings从.env读取DATABASE_URL、SECRET_KEY并提供默认值JWT_ALGORITHMHS256、ACCESS_TOKEN_EXPIRE_MINUTES15、REFRESH_TOKEN_EXPIRE_DAYS7、CORS_ORIGINS。建议在生产中通过环境变量注入SECRET_KEY等敏感项密钥需满足 32 字节以上随机性且严禁提交到 Git。异步数据库会话连接池backend/app/core/database.py的DatabaseSessionManager使用create_async_engineasync_sessionmaker(expire_on_commitFalse)连接池参数DB_POOL_SIZE20 # 池内最大连接数 DB_MAX_OVERFLOW10 # 池满时额外连接数 DB_POOL_TIMEOUT30 # 获取连接最大等待秒数 DB_POOL_RECYCLE1800 # 连接回收周期30 分钟async with self._sessionmaker() as session上下文管理器自动完成 commit/rollback/close异常时统一 rollback 后向上抛出ARCHITECTURE.md。Alembic 迁移工作流模型改动后按四步走改模型 →just migration Add user bio field自动生成迁移脚本 → 人工 review 生成的upgrade()/downgrade()→just migrate head应用。最佳实践包括始终审查自动迁移、测试回滚、大表加索引用独立迁移、数据变更也走迁移如先加列→回填默认值→再收紧为 NOT NULL。仓库backend/alembic/目录已内置迁移环境alembic.ini为迁移配置。测试与质量保障后端测试位于 backend/tests采用pytesthttpx.AsyncClient对应用工厂create_app()发起异步请求断言前端使用 Testing Library 验证表单渲染与提交。justfile将质量关卡编排为just ci # ruff pylint mypy pytest just test-cov # 带覆盖率报告 just check # ruff mypy 快速检查前后端还各自接入 biomeJS/TS lintformat、stylelintSCSS与tsc --noEmit构成完整的 CI 质量门禁。学习路线与扩展方向仓库为该项目准备了五份递进式学习材料建议按以下顺序阅读模块文件内容入门GETTING-STARTED.md前置知识、项目初始化、分层代码手把手实现、常见陷阱架构ARCHITECTURE.md系统设计、数据流、状态管理、性能优化索引/连接池/Redis 缓存数据库DATABASE.md9 张表 Schema、ER 图、索引策略、迁移实战、常用查询安全SECURITY.md认证授权、令牌轮换、Argon2id、漏洞防护清单模式PATTERNS.md八大设计模式及其在源码中的落点项目根目录还提供 DEMO.md 演示说明。若要在既有代码库上继续扩展可结合以上材料尝试为报告状态机增加自动化 SLA 到期提醒、为reward_tiers接入支付网关、或基于EventBus引入 WebSocket 实时通知。许可说明项目以AGPL 3.0协议开源见 LICENSE自由使用、学习与二次开发但若以网络服务形式对外提供修改版需遵循 AGPL 的源码公开义务。结语Bug Bounty Platform 的价值不仅在于开箱即用的容器化交付更在于它把一套企业级漏洞众测产品所需的工程决策完整沉淀下来从 UUID v7 与 SafeEnum 这类数据库细节到 JWT 双令牌轮换与令牌版本化这类认证安全设计再到 Repository 分层架构 泛型仓储的代码组织方式。无论你是想直接部署一个内部漏洞响应平台还是希望借鉴其架构打造类似系统这份仓库及其 learn 模块 都是一份兼具实战与教学价值的参考实现。赞分享【免费下载链接】Cybersecurity-ProjectsBuilding 70 Projects ranging from beginner to advanced so anyone can — learn from, build upon, use as a reference, or even copy directly. Gamified Cybersecurity learning 项目地址https://gitcode.com/gh_mirrors/cy/Cybersecurity-Projects点击查看免费下载相关推荐从零构建漏洞赏金平台Bug Bounty Platform 全栈实战指南FastAPI React PostgreSQL从零构建漏洞赏金平台Bug Bounty Platform 全栈实战指南FastAPI React PostgreSQL 本指南以开源仓库 bugSurrealDB安全测试漏洞发现与报告流程SurrealDB安全测试漏洞发现与报告流程 你是否担心数据库安全隐患带来的风险参与SurrealDB安全测试计划不仅能帮助提升数据库安全性还能获得相应数据库后端分布式数据库文档数据库图数据库嵌入式数据库KV存储终极Bug Bounty指南500漏洞赏金项目完整清单解析终极Bug Bounty指南500漏洞赏金项目完整清单解析 对于网络安全爱好者和专业白帽黑客来说漏洞赏金Bug Bounty已成为获取实战经验、提升技文档网络安全上一篇Atlas本地知识库服务器atlas-kb-server是做什么的设计与Web UI全解下一篇Crystal 1.8 版本深度解析PCRE2 正则引擎、LLVM 15 支持与标准库大规模演进创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表