简体中文 | English
XuanQiong(玄穹)——一款高性能的开源漏洞库平台,适合中小型团队自建漏洞知识库、沉淀漏洞资产和管理审核流程。支持漏洞提交、漏洞审核、漏洞搜索、漏洞排行榜、动作级 RBAC、操作审计、站内消息、Webhook 推送、API Key、数据备份恢复和品牌定制等功能。
- Vite
- Vue3
- Element Plus
- TypeScript
- Gin
- GORM
- JWT(内部会话令牌签发与校验)
支持 MySQL、PostgreSQL、SQLite3、SQL Server 等数据库,具体查看 GORM 支持的数据库。
应用层浏览器会话使用 X-Auth-Token,自动化集成使用 X-API-Key,Authorization 保留给反向代理 Basic Auth 等代理层能力。
内置漏洞类型、漏洞评分规则和积分计算规则,详情查看积分规则。
演示环境:https://demo.hackall.cn
管理员账号:admin/Admin@123
普通用户账号:test/123456
- 完成动作级 RBAC、动态权限菜单、操作审计日志和品牌定制。
- 新增站内消息中心、Webhook 事件推送、漏洞 CSV 导入/导出、API Key 和数据备份恢复。
- 加固认证头隔离、附件访问控制、验证码频控、审计日志脱敏、导入导出、备份恢复和 API Key scope 控制。
- 修复前台导航品牌区、登录页 Footer、后台侧栏折叠按钮和空状态高度等布局问题。
- 首次启动随机生成管理员密码,首次登录后强制修改,不再在文档中提供固定默认凭据。
| 功能 | 说明 | 前端实现情况 | 后端实现情况 |
|---|---|---|---|
| 查看漏洞 | 查看漏洞摘要和详情,分页查看 | ✅ | ✅ |
| 注册 | 用户注册 | ✅ | ✅ |
| 登录退出 | 用户登录和退出 | ✅ | ✅ |
| 忘记密码 | 忘记密码后重置密码 | ✅ | ✅ |
| 我的信息 | 头像、用户名、邮箱和手机号修改,积分,漏洞提交情况展示 | ✅ | ✅ |
| 修改个人信息 | 修改用户名、邮箱、手机号、密码 | ✅ | ✅ |
| 消息 | 查看漏洞审核消息和积分变动通知 | ✅ | ✅ |
| 我提交的漏洞 | 查看自己提交的漏洞 | ✅ | ✅ |
| API Key / 个人访问令牌 | 创建、查看和删除个人 API Key,用于自动化集成 | ✅ | ✅ |
| 获取漏洞 | 获取漏洞摘要、详情 | ✅ | ✅ |
| 提交漏洞 | 提交漏洞信息 | ✅ | ✅ |
| 编辑漏洞 | 未审核通过的漏洞信息修改 | ✅ | ✅ |
| 附件上传 | 上传漏洞信息附件 | ✅ | ✅ |
| 附件下载 | 按漏洞公开状态、提交者和权限控制下载附件 | ✅ | ✅ |
| 简单搜索 | 模糊搜索 | ✅ | ✅ |
| 高级搜索 | 精确搜索 | ✅ | ✅ |
| 排行榜 | 月度、季度、年度排行榜 | ✅ | ✅ |
| 语言切换 | 支持中文和英文 | ✅ | ✅ |
| 品牌定制展示 | 展示后台配置的站点名称、Logo、页脚、帮助链接和建议反馈链接 | ✅ | ✅ |
| 功能 | 说明 | 前端实现情况 | 后端实现情况 |
|---|---|---|---|
| 登录退出 | 管理员登录和退出 | ✅ | ✅ |
| 忘记密码 | 忘记密码 | ✅ | ✅ |
| 修改个人信息 | 修改用户名、邮箱、手机号、密码 | ✅ | ✅ |
| 创建用户 | 创建用户并分配角色 | ✅ | ✅ |
| 查看用户 | 分页查看用户列表 | ✅ | ✅ |
| 修改用户信息 | 修改用户信息,包含密码、邮箱、手机号、状态和角色等 | ✅ | ✅ |
| 删除用户 | 删除管理员或普通用户信息 | ✅ | ✅ |
| 仪表盘 | 展示漏洞总数、Poc总数、Exp总数、最近新增、用户总数、管理员总数、CPU、内存、磁盘使用情况 | ✅ | ✅ |
| 系统设置 | 功能启停、登录锁定策略、邮箱、JWT、Webhook 配置 | ✅ | ✅ |
| 品牌定制 | 配置站点名称、前台/后台标题、Logo、Favicon、页脚、帮助链接和建议反馈链接 | ✅ | ✅ |
| 角色和权限管理 | 创建、修改和删除角色,为角色分配动作级权限 | ✅ | ✅ |
| 动态权限菜单 | 后台菜单按当前用户权限动态展示 | ✅ | ✅ |
| 操作审计日志 | 记录登录、配置、用户、角色、漏洞审核等操作,支持检索和详情查看 | ✅ | ✅ |
| 漏洞管理 | 添加、修改和删除漏洞类型,查看、更新、审核和删除漏洞 | ✅ | ✅ |
| 评分规则管理 | 添加、修改和删除评分规则 | ✅ | ✅ |
| 语言切换 | 支持中文和英文 | ✅ | ✅ |
| 消息推送 | 触发漏洞审核、积分变动等事件后的站内消息或 Webhook 推送 | ✅ | ✅ |
| 漏洞导入/导出 | 通过 CSV 批量导入待审核漏洞并导出漏洞数据 | ✅ | ✅ |
| API Key 管理 | 创建、查看和删除个人 API Key,支持 X-API-Key 调用接口 |
✅ | ✅ |
| 数据备份和恢复 | 导出 JSON 备份并按权限恢复核心数据 | ✅ | ✅ |
| 功能 | 说明 | 实现情况 |
|---|---|---|
| 应用鉴权头隔离 | 应用层仅使用 X-Auth-Token,避免与反向代理 Basic Auth 的 Authorization 头冲突 |
✅ |
| 初始管理员密码 | 首次启动随机生成管理员密码,登录后强制修改密码 | ✅ |
| 强制重新登录 | 用户修改密码或角色权限变化后,旧 Token 失效 | ✅ |
| 附件访问控制 | 附件下载按漏洞公开状态、提交者和管理权限校验 | ✅ |
| 验证码频控 | 验证码接口包含邮箱、IP 和全局频控 | ✅ |
| 敏感信息脱敏 | 系统配置、审计日志和响应记录对 Token、密码、Secret 等敏感信息脱敏 | ✅ |
| 上传限制 | 漏洞附件限制类型和大小,当前最大 10 MB | ✅ |
| API Key 鉴权 | 支持 X-API-Key 长期令牌,服务端仅保存哈希,明文只在创建时显示一次 |
✅ |
| 漏洞导入/导出 | 支持后台 CSV 导入和导出,导入数据默认进入待审核流程 | ✅ |
| 数据备份恢复 | 支持后台导出和恢复 JSON 备份,受 backup.manage 权限保护 |
✅ |
| 功能 | 当前状态 | 说明 |
|---|---|---|
| 站内消息中心 | 已实现 | 漏洞审核完成后会写入用户站内消息,前台支持查看和标记已读。 |
| 事件消息推送 | 已实现 | 漏洞审核完成后按系统设置发送钉钉或企业微信 Webhook 通知。 |
| 漏洞导入/导出 | 已实现 | 后台支持 CSV 导入和导出,导入漏洞默认进入待审核状态。 |
| API Key / 个人访问令牌 | 已实现 | 支持创建、查看和删除个人 API Key,调用接口时使用 X-API-Key。 |
| 数据备份和恢复 | 已实现 | 后台支持 JSON 备份导出和恢复,恢复操作受 RBAC 权限保护。 |
XuanQiong/
│
├── backend/ # 后端目录
│ ├── config/ # 配置解析和验证
│ ├── controllers/ # 控制器,处理路由和逻辑
│ ├── models/ # 数据模型
│ ├── routes/ # 路由定义
│ ├── types/ # 类型定义
│ ├── utils/ # 工具和辅助函数
│
├── frontend/ # 用户界面目录,Vue3+Vite+Element Plus+Typescript
| ├── dist # build生成的目录
│ │ └── assets/ # 静态资源,如图片、样式等
│ │ └── index.html # 用户端入口文件
|
├── admin/ # 后台管理界面目录,Vue3+Vite+Element Plus+Typescript
│ ├── dist # build生成的目录
│ │ └── assets/ # 静态资源,如图片、样式等
│ │ └── index.html # 后台入口文件
|
├── config.yaml # 配置文件
├── go.mod # Go Modules 依赖文件
├── go.sum
├── main.go # 主入口
└── README.md # 项目说明文件
支持前后端一体和前后端分离,已在 MySQL 和 Sqlite 测试,建议使用MySQL。如果遇到问题请查看FAQ。
使用 sqlite 时,需要设置环境变量 CGO_ENABLED=1 后重新 build,Releases 中的二进制文件使用 CGO_ENABLED=0 编译。
默认使用一体化模式启动,步骤如下:
- 修改
config.yaml中的数据库配置,修改数据库名称,初始化时自动创建数据库。 - 运行
go run main.go或 Releases 中的二进制文件即可。
启动后会随机生成管理员密码。首次使用该密码登录后,系统会强制管理员修改密码。
用户前端文件和管理员前端文件独立,可分别部署在不同web目录下。后台服务通过 config.yaml 中的 start_mode 参数切换启动模式。
- 前端配置
src/api.ts中 baseURL 地址,然后编译。 - 编译后的用户前端文件位于:
frontend/dist目录下,复制目录下的文件到 web 目录即可。 - 编译后的管理员前端文件位于:
admin/dist目录下,复制目录下的文件到 web 目录即可。 - 后端配置CORS、运行模式,修改
config.yaml中的start_mode,allow_origins,allow_methods和allow_headers参数,然后运行即可。