苹果树下论坛 (GoBBS)程序说明文档
一个仿古风格的 BBS 论坛系统,复刻经典 phpwind 苹果树下(appletree)主题风格。基于 Go + Vue.js 全栈构建,从原 phpwind 站点完整迁移数据,保留经典界面风格的同时,用现代技术栈重新实现全部功能。
技术栈
| 层级 | 技术 | 说明 |
|---|---|---|
| 后端语言 | Go 1.25 | 高性能编译型语言 |
| Web 框架 | Gin | HTTP 路由、中间件、模板渲染 |
| ORM | GORM | MySQL 数据库操作、自动迁移 |
| 数据库 | MySQL 8.0 | utf8mb4 编码,支持 emoji |
| 前端框架 | Vue 3 + Vue Router | SPA 单页应用,组件化开发 |
| UI 组件 | Element Plus | 后台管理界面组件库 |
| 富文本编辑器 | WangEditor V5 | 发帖/回复编辑器,支持图片/视频/附件上传 |
| AI 服务 | 硅基流动 API | Chat Completions 接口,默认 DeepSeek-V4-Flash |
| 配置管理 | Viper | YAML 配置文件读写,支持热更新 |
| 认证 | JWT (golang-jwt/v5) | Token 认证,可配置过期时间 |
| 压缩 | gzip (gin-contrib) | HTTP 响应 Gzip 压缩 |
| 跨域 | CORS (gin-contrib) | 跨域请求支持 |
功能详情
前台功能
首页
- 版块分类展示(带版块图标、描述、今日发帖数)
- 今日热门帖子列表(按权限过滤)
- 在线用户实时统计(内存追踪,5分钟清理超时用户)
- 友情链接展示
版块浏览(/thread/:fid)
- 主题列表(标题、作者、回复数、浏览数、最后回复时间)
- 分页浏览
- 版块信息展示(版主、主题数、帖子数)
- 新帖标识
发帖(/post/:fid)
- WangEditor V5 富文本编辑器
- 图片上传(5MB 限制,自动插入编辑器)
- 视频上传(50MB 限制,自动插入编辑器)
- 附件上传(PDF/DOC/DOCX/XLS/XLSX/PPT/PPTX/ZIP/RAR/7Z,插入下载链接)
- 标题输入、发表/取消操作
帖子阅读(/read/:tid)
- 楼层式回复展示(0楼为主题,后续为回复)
- 用户信息卡片(头像、用户组、等级、发帖数、铜币、威望等)
- 用户签名档展示
- 分页浏览回复
- 快速回复(带 WangEditor 编辑器)
- 面包屑导航
用户系统
- 注册(/register):用户名、密码、邮箱
- 登录(/login):用户名 + 密码,JWT Token 认证
- 个人中心(/user/:uid):头像、签名、用户组、注册时间
- 用户空间:日志列表、相册展示
- 个人资料编辑、密码修改
- 用户文章列表
站内信(/messages)
- 私信收发
- 未读消息计数(头部实时显示)
- 标记已读、删除消息
- 搜索用户发送私信
搜索(/search)
- 关键词搜索帖子
道具中心(/toolcenter)
- 道具商店浏览(道具名称、描述、价格、库存)
- 购买道具(金币/积分/贡献值支付)
- 使用道具(查看已拥有道具、使用/出售)
勋章系统(/medal)
- 勋章展示墙(勋章图片、名称、描述)
- 申请勋章(开放申请的勋章)
- 我的勋章(已获得勋章列表)
发帖背景(/autherbg)
- 背景商店浏览(背景预览、价格、库存)
- 购买发帖背景(金币/积分/贡献值支付)
- 设置当前使用的发帖背景
排行榜(/sort)
- 基本统计(帖子数、会员数、最新会员等)
- 会员排行(发帖数、金币、威望等排序)
- 版块排行(帖子数排序)
- 帖子排行(热门帖子)
- 在线统计(当前在线用户)
- 管理团队(管理员、版主列表)
- 最新会员
付费内容
- 帖子付费内容(发帖时设置付费区域,读者购买后查看)
- 附件付费下载(设置附件价格,购买后下载)
- 付费设置管理

后台管理(/admin)
控制面板
- 站点统计概览:总用户数、总帖子数、总回复数、今日发帖数
- 最近注册用户列表
版块管理
- 分类/版块 CRUD(创建、编辑、删除)
- 分类管理:独立编辑弹窗,单管理员
- 版块管理:独立编辑弹窗,支持多管理员
- 权限配置:浏览权限、发帖权限、回复权限(按用户组)
- 权限快捷按钮:一键设置常用权限组合
- 版块图标上传
帖子管理
- 帖子列表(标题、作者、版块、回复数、发布时间)
- 点击标题查看帖子内容(弹窗预览)
- 删除帖子
- 置顶、精华标记
用户管理
- 用户列表(用户名、用户组、金币、积分、贡献值、发帖数)
- 搜索用户
- 编辑用户信息、调整用户组
- 修改用户资产(金币、积分、贡献值、威望)
- 发放道具给用户(选择道具、设置数量,自动记录发放日志)
- 禁言/解禁用户(支持设置禁言天数和原因)
- 批量操作(批量删除、批量禁言、批量解禁)
- 删除用户
公告管理
- 公告列表
- 创建/编辑/删除公告
道具管理
- 道具列表(名称、描述、价格、库存、状态)
- 编辑道具信息
勋章管理
- 勋章列表(名称、描述、图片、排序)
- 创建/编辑/删除勋章
- 颁发勋章给用户
- 勋章申请审批
发帖背景管理
- 背景列表(名称、图片、价格、库存、状态)
- 创建/编辑/删除发帖背景
日志管理
- 用户日志列表
- 删除日志
照片管理
- 用户照片列表
- 删除照片
备份还原
- 数据库备份(mysqldump)
- 备份列表(文件名、大小、时间)
- 还原备份
- 下载备份文件
- 删除备份
- 平台适配:Windows 使用 phpStudy 路径,Linux 使用宝塔面板路径
AI 助手(/admin/ai)
- 模型配置:API Key、模型选择(支持自定义输入)、Max Tokens、Temperature、Top P
- 自动发帖:开关、间隔时间(分钟)、自定义提示词(支持
{forum_name}变量) - 自动回复:开关、间隔时间(分钟)、自定义提示词(支持
{subject}、{content}变量) - 热门话题:一键获取 AI 生成的当前网络热点话题
- 调度管理:可视化启停调度器,实时查看运行状态
- 测试功能:一键测试发帖/回复,验证 AI 配置是否正确
- 可选模型:DeepSeek-V4-Flash(默认)、DeepSeek-V3.2、GLM-4.7、Qwen3-32B 等
系统设置
- 基本设置:站点名称、URL、开放注册、注册审核、论坛关闭、ICP备案、统计代码
- 功能设置:日志/相册开关、发帖审核、图片水印、每页条数、上传大小限制
- 内容过滤:禁止词语(发帖自动替换为 ***)
- 友情链接:名称|URL 格式,每行一个
- 安全设置:JWT 密钥、Token 有效期
重启服务
- 后台右上角「重启」按钮
- Windows:优雅关闭 HTTP 服务 → 释放端口 → 启动新进程 → 退出当前进程
- Linux:优雅关闭 HTTP 服务 → 退出当前进程(由宝塔等进程管理器自动重启)
- 前端自动检测服务恢复后刷新页面
API 接口
公开接口(无需登录)
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /v1/index | 首页数据 |
| GET | /v1/forums | 版块列表 |
| GET | /v1/forum/:fid | 版块详情 |
| GET | /v1/threads/:fid | 主题列表 |
| GET | /v1/thread/:tid | 主题详情 |
| GET | /v1/posts/:tid | 回帖列表 |
| GET | /v1/user/:uid | 用户信息 |
| GET | /v1/search | 搜索 |
| GET | /v1/current_user | 当前登录用户 |
| GET | /v1/diaries/:uid | 用户日志列表 |
| GET | /v1/photos/:uid | 用户照片列表 |
| GET | /v1/user/articles/:uid | 用户帖子列表 |
| GET | /v1/tools | 道具商店列表 |
| GET | /v1/medals | 勋章列表 |
| GET | /v1/autherbgs | 发帖背景列表 |
| GET | /v1/sort/stats | 基本统计 |
| GET | /v1/sort/member | 会员排行 |
| GET | /v1/sort/forum | 版块排行 |
| GET | /v1/sort/article | 帖子排行 |
| GET | /v1/sort/online | 在线统计 |
| GET | /v1/sort/team | 管理团队 |
| GET | /v1/sort/newmembers | 最新会员 |
| GET | /v1/attach/download/:aid | 下载附件 |
| POST | /v1/login | 登录 |
| POST | /v1/register | 注册 |
| POST | /v1/logout | 退出 |
需要登录的接口
| 方法 | 路径 | 说明 |
|---|---|---|
| POST | /v1/thread | 发主题 |
| POST | /v1/post | 发回复 |
| POST | /v1/upload | 上传文件(图片/视频/附件) |
| GET | /v1/messages | 消息列表 |
| POST | /v1/message | 发送消息 |
| GET | /v1/message/unread | 未读消息数 |
| DELETE | /v1/message/:mid | 删除消息 |
| PUT | /v1/message/:mid/read | 标记已读 |
| GET | /v1/user/search | 搜索用户 |
| POST | /v1/diary | 创建日志 |
| DELETE | /v1/diary/:did | 删除日志 |
| POST | /v1/photo | 上传照片 |
| DELETE | /v1/photo/:pid | 删除照片 |
| PUT | /v1/user/profile | 编辑个人资料 |
| PUT | /v1/user/password | 修改密码 |
| POST | /v1/tool/buy | 购买道具 |
| POST | /v1/tool/use | 使用道具 |
| POST | /v1/medal/apply | 申请勋章 |
| POST | /v1/autherbg/buy | 购买发帖背景 |
| POST | /v1/user/bg | 设置当前发帖背景 |
| POST | /v1/pay/sell | 购买帖子付费内容 |
| POST | /v1/pay/attach | 购买附件 |
| PUT | /v1/attach/setting | 更新附件付费设置 |
管理员接口
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /v1/admin/stats | 统计概览 |
| GET | /v1/admin/threads | 主题管理列表 |
| PUT | /v1/admin/thread/:tid | 更新主题 |
| DELETE | /v1/admin/thread/:tid | 删除主题 |
| GET | /v1/admin/users | 用户管理列表 |
| PUT | /v1/admin/user/:uid | 更新用户(含金币/积分/贡献值/威望) |
| DELETE | /v1/admin/user/:uid | 删除用户 |
| POST | /v1/admin/user/:uid/tool | 发放道具给用户 |
| GET | /v1/admin/announces | 公告列表 |
| POST | /v1/admin/announce | 创建公告 |
| PUT | /v1/admin/announce/:aid | 更新公告 |
| DELETE | /v1/admin/announce/:aid | 删除公告 |
| GET | /v1/admin/settings | 站点设置 |
| PUT | /v1/admin/settings | 更新设置 |
| GET | /v1/admin/diaries | 日志管理列表 |
| DELETE | /v1/admin/diary/:did | 删除日志 |
| GET | /v1/admin/photos | 照片管理列表 |
| DELETE | /v1/admin/photo/:pid | 删除照片 |
| POST | /v1/admin/forum | 创建版块 |
| PUT | /v1/admin/forum/:fid | 更新版块 |
| DELETE | /v1/admin/forum/:fid | 删除版块 |
| GET | /v1/admin/tools | 道具列表 |
| PUT | /v1/admin/tool/:id | 更新道具 |
| GET | /v1/admin/medals | 勋章列表 |
| POST | /v1/admin/medal | 创建勋章 |
| PUT | /v1/admin/medal/:id | 更新勋章 |
| DELETE | /v1/admin/medal/:id | 删除勋章 |
| POST | /v1/admin/medal/award | 颁发勋章 |
| GET | /v1/admin/medal/applies | 勋章申请列表 |
| POST | /v1/admin/medal/apply/:id | 审批勋章申请 |
| GET | /v1/admin/autherbgs | 发帖背景列表 |
| POST | /v1/admin/autherbg | 创建发帖背景 |
| PUT | /v1/admin/autherbg/:id | 更新发帖背景 |
| DELETE | /v1/admin/autherbg/:id | 删除发帖背景 |
| GET | /v1/admin/backups | 备份列表 |
| POST | /v1/admin/backup | 创建备份 |
| POST | /v1/admin/backup/restore | 还原备份 |
| DELETE | /v1/admin/backup/:name | 删除备份 |
| GET | /v1/admin/backup/:name/download | 下载备份 |
| GET | /v1/admin/ai | AI设置 |
| PUT | /v1/admin/ai | 更新AI设置 |
| POST | /v1/admin/ai/test-post | AI发帖测试 |
| POST | /v1/admin/ai/test-reply | AI回复测试 |
| POST | /v1/admin/ai/fetch-topics | AI获取热门话题 |
| POST | /v1/admin/ai/scheduler | AI调度器开关 |
| POST | /v1/admin/restart | 重启服务 |
目录结构
gobbs/
├── main.go # 程序入口:加载配置、初始化数据库、启动HTTP服务、重启逻辑
├── config.yaml # 配置文件:MySQL、JWT、服务器、AI等配置
├── go.mod / go.sum # Go模块依赖
│
├── configs/
│ └── config.go # 配置加载(Viper)、数据库初始化、MySQL服务管理、平台适配
│
├── models/
│ ├── user.go # 用户模型(User、UserData、UserGroup)
│ ├── thread.go # 主题模型(Thread)
│ ├── post.go # 回复模型(Post)
│ ├── forum.go # 版块模型(Forum、ForumType)
│ ├── tool.go # 道具/勋章/发帖背景模型(Tool、UserTool、ToolLog、MedalInfo、MedalAward、AutherBg、UserBg)
│ └── other.go # 其他模型(Attach、Announce、Diary、Photo、Message、OnlineTracker)
│
├── controllers/
│ ├── home.go # 前台控制器:首页、版块、帖子、上传、日志、照片、消息、搜索
│ ├── thread.go # 主题控制器:发帖、回复、帖子详情
│ ├── user.go # 用户控制器:用户信息、个人资料、密码修改
│ ├── forum.go # 版块控制器:版块列表、版块详情
│ ├── tool.go # 道具控制器:道具商店、购买、使用、勋章、发帖背景、付费内容
│ ├── sort.go # 排行控制器:会员排行、版块排行、帖子排行、在线统计
│ ├── admin.go # 后台管理控制器:统计、帖子管理、用户管理(含资产/道具发放)、公告、设置、重启
│ ├── ai.go # AI助手控制器:AI设置、测试发帖/回复、热门话题、调度器
│ ├── backup.go # 备份还原控制器:数据库备份、还原、下载
│ ├── bbcode.go # BBCode控制器:附件下载、付费内容
│ └── auth.go # 认证控制器:登录、注册、退出、当前用户
│
├── services/
│ └── ai.go # AI服务:硅基流动API对接、自动发帖/回复、调度器、热门话题
│
├── middleware/
│ └── auth.go # JWT认证中间件:Token解析、登录校验、管理员校验
│
├── routers/
│ └── router.go # 路由注册:静态文件、页面路由、API接口
│
├── templates/
│ ├── pc/ # 前台模板
│ │ ├── pc.html # 前台入口HTML(Vue SPA挂载点)
│ │ ├── component/
│ │ │ ├── header.js # 头部组件(导航栏、登录状态、未读消息)
│ │ │ └── footer.js # 底部组件(在线用户、版权信息)
│ │ ├── home/
│ │ │ ├── index.js # 首页
│ │ │ ├── thread.js # 版块帖子列表
│ │ │ ├── read.js # 帖子阅读+回复
│ │ │ ├── post.js # 发帖
│ │ │ ├── login.js # 登录
│ │ │ ├── register.js # 注册
│ │ │ ├── user.js # 用户中心
│ │ │ ├── messages.js # 站内信
│ │ │ ├── search.js # 搜索
│ │ │ ├── toolcenter.js # 道具中心
│ │ │ ├── medal.js # 勋章系统
│ │ │ ├── autherbg.js # 发帖背景
│ │ │ └── sort.js # 排行榜
│ │ └── static/
│ │ ├── api.js # Axios封装(请求拦截、Token管理)
│ │ ├── route.js # 前端路由配置
│ │ ├── apptree.css # 苹果树下主题样式
│ │ ├── pw_core.css # phpwind核心样式
│ │ ├── u_theme.css # 用户中心样式
│ │ ├── wangeditor.js # WangEditor V5 编辑器
│ │ ├── wangeditor.css # WangEditor 样式
│ │ ├── vue3.js # Vue 3 运行时
│ │ ├── vue-router.js # Vue Router
│ │ ├── element.js # Element Plus 组件库
│ │ ├── element.css # Element Plus 样式
│ │ ├── icons.js # Element Plus 图标
│ │ ├── el-zh-cn.js # Element Plus 中文语言包
│ │ ├── axios.min.js # Axios HTTP库
│ │ └── lodash.min.js # Lodash 工具库
│ └── admin/ # 后台模板
│ ├── admin.html # 后台入口HTML(Vue SPA挂载点)
│ ├── component/
│ │ └── layout.js # 后台布局(侧边栏菜单、头部、重启按钮)
│ └── page/
│ ├── dashboard.js # 控制面板
│ ├── forum.js # 版块管理
│ ├── thread.js # 帖子管理
│ ├── user.js # 用户管理
│ ├── announce.js # 公告管理
│ ├── diary.js # 日志管理
│ ├── photo.js # 照片管理
│ ├── backup.js # 备份还原
│ ├── ai.js # AI助手
│ ├── setting.js # 系统设置
│ └── login.js # 后台登录
│
├── static/ # 静态资源
│ ├── images/ # 主题图片资源
│ │ ├── appletree/ # 苹果树下主题图片(背景、图标、等级标识等)
│ │ ├── face/ # 默认头像
│ │ ├── forumlogo/ # 版块图标
│ │ └── pwicon/ # 功能图标
│ └── upload/ # 用户上传文件目录
│
├── backups/ # 数据库备份文件存放目录
│
└── tools/
└── bbcode2html/ # phpwind BBCode 转 HTML 工具
└── main.go # 转换工具源码
平台适配
| 特性 | Windows (phpStudy) | Linux (宝塔面板) |
|---|---|---|
| MySQL 初始化 | 自动启动 MySQL、创建数据库和用户 | 直接连接已有 MySQL |
| MySQL 路径 | D:/phpstudy_pro/Extensions/MySQL8.0.12/bin/ | /www/server/mysql/bin/ |
| 备份工具 | mysqldump (phpStudy 路径) | mysqldump (宝塔路径) |
| 重启方式 | 优雅关闭 → 启动新进程 → 退出 | 优雅关闭 → 退出(进程管理器自动重启) |
| 数据目录 | D:/phpstudy_pro/WWW/bbs.com/ | /www/wwwroot/bbs.com/ |
数据迁移
从 phpwind 迁移数据时,提供了 BBCode 转 HTML 工具(tools/bbcode2html/),支持以下标签转换:
| 原始标签 | 转换结果 |
|---|---|
[p=null, 2, left]...[/p] | <p style="text-align:left;">...</p> |
[attachment=N] | 附件链接(查询数据库获取文件路径) |
[mp3=0]路径[/mp3] | <audio controls src="路径"></audio> |
[video=480,400,0]路径[/video] | <video controls width="480" height="400" src="路径"></video> |
[p_w_upload=N] | 附件下载链接 |
| 优酷/土豆 Flash 视频 | <iframe> 嵌入 |
残留 </video> 标签 | 清理移除 |
快速开始
环境要求
- Go 1.25+
- MySQL 8.0+
- Windows: phpStudy(可选,程序可自动启动 MySQL)
- Linux: 宝塔面板(可选,需自行配置 MySQL)
安装步骤
- 克隆项目
cd /your/web/directory
git clone <repo-url> gobbs
cd gobbs
- 配置数据库
编辑config.yaml,修改 MySQL 连接信息:
mysql:
host: localhost
port: 3306
database: bbs
username: root
password: "your_password"
- 编译运行
# 直接编译运行
go build -o gobbs .
./gobbs
或使用编译脚本(自动编译 Windows + Linux 版本并 UPX 压缩):
build.bat
编译产物:gobbs.exe(Windows)、gobbs(Linux ELF),均放在项目根目录。Windows 环境会自动启动 MySQL、创建数据库和用户。
- 访问站点
配置说明
MySQL 配置
mysql:
host: localhost # MySQL 主机地址
port: 3306 # MySQL 端口
database: bbs # 数据库名
username: root # 数据库用户名
password: "your_password" # 数据库密码
charset: utf8mb4 # 字符集(支持 emoji)
parsetime: true # 解析时间
timezone: Asia/Shanghai # 时区
root_password: "" # MySQL root 密码(Windows 初始化用)
JWT 配置
jwt:
secret: gobbs_secret_key_2026 # JWT 签名密钥(修改后所有用户需重新登录)
expire_hours: 72 # Token 有效期(小时)
服务器配置
server:
port: "8080" # 服务端口
name: "我的论坛" # 站点名称
url: "http://localhost:8080/" # 站点URL(影响附件链接地址)
reg: "开启" # 开放注册(开启/关闭)
icp: "" # ICP备案号
stat_code: "" # 第三方统计代码
watermark: "关闭" # 图片水印(开启/关闭)
watermark_text: "" # 水印文字
threads_per_page: 20 # 每页主题数
posts_per_page: 10 # 每页回帖数
upload_max_size: 2 # 上传大小限制(MB)
diary_open: "开启" # 日志功能开关
photo_open: "开启" # 相册功能开关
reg_check: "关闭" # 注册审核(开启后需管理员审核)
post_check: "关闭" # 发帖审核(开启后需管理员审核)
ban_words: "" # 禁止词语(每行一个)
links: "" # 友情链接(名称|URL,每行一个)
forum_closed: "关闭" # 论坛关闭开关
closed_reason: "论坛维护中..." # 关闭原因
AI 配置
ai:
api_key: "" # 硅基流动 API Key(在 cloud.siliconflow.cn 获取)
model: "deepseek-ai/DeepSeek-V4-Flash" # AI 模型
max_tokens: 2048 # 最大生成 Token 数
temperature: 0.7 # 生成温度(0-1,越高越随机)
top_p: 0.7 # Top P 采样(0-1)
auto_post: "关闭" # 自动发帖开关
auto_reply: "关闭" # 自动回复开关
post_interval: 60 # 发帖间隔(分钟)
reply_interval: 30 # 回复间隔(分钟)
topic_prompt: "" # 自定义发帖提示词
reply_prompt: "" # 自定义回复提示词
提示词变量
发帖提示词可用变量:
{forum_name}— 版块名称
回复提示词可用变量:
{subject}— 帖子标题{content}— 帖子内容(截取前500字)
可用模型
| 模型 | 说明 |
|---|---|
| deepseek-ai/DeepSeek-V4-Flash | 默认,免费快速 |
| deepseek-ai/DeepSeek-V3.2 | 更强推理能力 |
| Pro/deepseek-ai/DeepSeek-V3.2 | Pro 版本 |
| Pro/zai-org/GLM-4.7 | 智谱 GLM |
| Qwen/Qwen3-32B | 通义千问 |
| Qwen/Qwen3-14B | 通义千问轻量版 |
| Qwen/Qwen3-8B | 通义千问最小版 |
主题风格
本论坛复刻 phpwind 苹果树下(appletree)主题,主要风格特征:
- 配色:绿色系主色调,白色内容区,深色侧边栏
- 布局:经典 BBS 两栏/三栏布局,左侧用户信息、右侧内容
- 元素:苹果树等级图标(
static/images/appletree/level/)、面包屑导航、楼层式回复 - 字体:宋体/微软雅黑,12-14px 正文
- 图标:gif 小图标风格,复古按钮样式
- CSS:
apptree.css(主样式)、pw_core.css(核心样式)、u_theme.css(用户中心样式)
上传功能
WangEditor 编辑器支持三种上传类型:
| 类型 | 允许格式 | 大小限制 | 插入方式 |
|---|---|---|---|
| 图片 | image/* | 5MB | 直接插入编辑器 |
| 视频 | video/* | 50MB | 直接插入编辑器 |
| 附件 | PDF/DOC/DOCX/XLS/XLSX/PPT/PPTX/ZIP/RAR/7Z | 无限制 | 插入下载链接(带文件类型图标和大小) |
上传接口:POST /v1/upload,返回格式:
{
"errno": 0,
"data": { "url": "http://localhost:8080/static/upload/1_1234567890.pdf" },
"aid": 1,
"name": "文件名.pdf",
"size": 1024
}
安全说明
- JWT Token 认证,支持配置密钥和过期时间
- 管理员接口需通过
RequireAdmin()中间件校验 - 上传文件重命名(
uid_时间戳.扩展名),防止路径穿越 - MySQL 密码不在日志中输出
- CORS 可配置允许来源
- Gzip 压缩减少传输数据量
更新日志
2026-05-06 安全加固与功能完善
安全修复
| 漏洞 | 风险等级 | 修复说明 |
|---|---|---|
| 上传接口无文件类型白名单 | 高危 | 添加 allowedUploadExts 白名单,只允许图片/文档/压缩包/音视频格式 |
| 上传接口无大小限制 | 高危 | 非图片文件限制10MB,图片不限制(后端统一压缩) |
| 双扩展名攻击 | 高危 | 禁止文件名含多个点号(如 shell.php.jpg) |
| Content-Disposition 文件名注入 | 高危 | 过滤文件名中的引号、换行符、反斜杠 |
| CORS 配置错误 | 高危 | AllowOrigins:* + AllowCredentials:true 改为指定域名 |
| jwt_secret 明文泄露 | 高危 | 管理员设置接口返回 ****** 替代真实密钥 |
| 照片上传无类型/大小限制 | 高危 | 添加图片扩展名白名单和双扩展名防护 |
| UseTool 越权操作 | 高危 | 管理类道具(置顶/精华/醒目)只允许帖子作者或管理员使用 |
| 缺少安全响应头 | 中危 | 添加 X-Content-Type-Options、X-Frame-Options、X-XSS-Protection、CSP 等 |
图片上传安全:压缩重绘消除木马
新增 utils/image.go 图片处理模块,所有上传图片经过以下处理:
- 解码验证:尝试用 Go 标准库解码图片,无法解码则拒绝(防止伪装为图片的脚本文件)
- 等比缩放:宽度超过 1080px 的图片自动等比缩放至 1080px 宽
- 重绘输出:通过解码→重编码过程,消除图片中可能嵌入的恶意代码(如 PHP 木马)
- 格式优化:无透明通道的 PNG 自动转为 JPEG 节省空间,有透明通道的保持 PNG
- 不限制大小:图片上传不限制文件大小,因为后端会统一压缩
技术实现:使用 github.com/disintegration/imaging 库,Lanczos 算法缩放,JPEG 质量 85%。
道具中心页面重构
- 样式统一为与发帖背景页面一致的卡片式布局
- 标签导航改为橙色主题标签页(道具商店 / 我的道具 / 使用说明)
- 购买对话框改为自定义弹窗(与发帖背景购买弹窗风格一致)
- 使用对话框增加道具使用说明和帖子TID输入
- 新增「使用说明」标签页,列出所有道具的功能描述
- 道具使用时根据道具类型显示不同的使用提示
发帖页面售密设置
- 新增帖子内容售密设置区域(出售/回复可见/积分隐藏)
- 支持 BBCode 标签:
[sell=价格,积分类型]、[post]、[hide=积分值] - 附件上传区域增加付费/加密设置(设置对话框、删除确认)
- 附件设置对话框样式修复(动态CSS注入)
发帖背景页面完善
- 新增「我的设置」标签页(当前背景预览、发帖效果预览、使用说明)
- 购买失败时显示具体原因(如金币不足)
- 修复背景图片不显示问题(文件名特殊字符重命名)
温馨提示
知识产权声明:本软件已获国家版权局软件著作权登记(登记号:2022SR0558725),受《计算机软件保护条例》保护。未经书面授权,严禁对本软件进行反向工程、反编译、破解或任何形式的篡改。侵权必究。
官方指引:本文档为官方安装部署说明,仅适用于当前发布版本,后续版本请以最新官方文档为准。
环境要求:安装前请确认操作系统版本、运行环境(如 .NET、Java 等)及硬件配置满足软件运行要求,避免因环境不兼容导致异常。
操作风险与免责:安装配置涉及防火墙、注册表或环境变量等系统级变更,建议由具备相关经验的技术人员操作。因用户未严格遵循本官方指引或操作不当导致的任何数据丢失、系统异常或其他损失,我方不承担相关责任。如遇问题,请及时联系技术支持。
反馈渠道:如有未覆盖的问题,欢迎通过客服反馈,我们将持续更新与改进。
版本记录:最后更新于 2026-08-07