本文由 FlintHub 开发文档归档发布。原始文档日期见标题前缀,来源:7月5日复制的资料/会话归档_20260703.md。
SoSite 完整修复会话归档
会话日期:2026-07-03
涉及文件:约 30+ 个文件
修复类型:安全漏洞 / 逻辑缺陷 / 代码冗余 / 架构清理 / 移动端适配 / UI 细节
一、审查验证
对照《全面代码审查报告_20260703.md》逐条验证 21 项问题:
| 结果 | 数量 | 占比 |
|---|---|---|
| ✅ 问题真实存在 | 17 | 80.9% |
| ⚠️ 描述有偏差 | 2 | 9.5% |
| ✅ 已修复(报告未标注) | 2 | 9.5% |
| ❌ 误报 | 0 | 0% |
报告准确率约 90%。
二、修复清单
第1天 — 安全修复
| # | 问题 | 文件 | 改动 |
|---|---|---|---|
| F1 | RememberMe Token 不轮换 | app/Helpers/RememberMe.php | 登录成功后生成新 token,更新 DB + Cookie |
| F2 | renderBadge() 图标/标题 XSS | app/Helpers/Points.php | icon/title 加 htmlspecialchars |
| F3 | Maintenance GET 请求 CSRF 泄露 | app/Controllers/Admin/MaintenanceController.php + app/Views/admin/maintenance.php | $_GET → $_POST,链接改表单 |
| F4 | 500 错误信息泄露 | index.php | 详情写入 error_log,页面只显示通用提示 |
第2天 — 逻辑修复
| # | 问题 | 文件 |
|---|---|---|
| F6 | 邮件发送结果未检查 | app/Controllers/AuthController.php |
| F7 | TagsController 未分页 | app/Controllers/TagsController.php |
| F8 | hook('init_after') 重复调用 | index.php |
| F9 | $filteredRawThreads 未初始化 | app/Controllers/SearchController.php |
| F10 | ensureEmailVerifyColumns() 重复 | app/Controllers/AuthController.php |
第3天 — 架构清理
| # | 问题 | 文件 |
|---|---|---|
| F11 | 双模板引擎(删 View.php) | app/Core/Router.php, app/Core/View.php(删) |
| F12-F13 | getDbType/query SQLite 注释澄清 | app/Core/Database.php |
| F14 | 空方法注释完善 | app/Helpers/Search.php |
补充修复
| # | 问题 | 文件 |
|---|---|---|
| F5 | 搜索权限 SQL 层过滤 | app/Helpers/Search.php + app/Controllers/SearchController.php |
| F15 | 后台批量移动提取公共方法 | Admin/BaseController.php, Admin/ThreadController.php, Admin/BlogController.php |
| F16 | 登录锁定 Session→DB | app/Controllers/AuthController.php |
三、扫描修复(全项目安全遍历)
| 级别 | 问题 | 文件 |
|---|---|---|
| 🔴 | DatabaseController import 无 POST 校验 | Admin/DatabaseController.php |
| 🔴 | saveCss </style> 逃逸 | Admin/ThemeController.php |
| 🟠 | Autoloader 路径穿越 | app/Core/Autoloader.php |
| 🟡 | 5 处 $_GET 裸传视图 | 5 个 Controller 加 htmlspecialchars() |
| 🟡 | TemplateCompiler extract() 变量覆盖 | app/Core/TemplateCompiler.php 加 EXTR_SKIP |
| 🟡 | UserController goto 语句 | Admin/UserController.php 重构为 if/else |
四、移动端导航菜单适配(耗时最长)
4.1 初始问题
点击汉堡菜单,导航项浮动在内容上方,不推内容。
4.2 修改过程
| 轮次 | 改动 | 效果 |
|---|---|---|
| 1 | .nav-links 去掉 position:absolute | 菜单展开后推内容 |
| 2 | 插件/用户放在同一行,flex 布局 | 底部两栏布局 |
| 3 | overflow:hidden → 插件下拉被裁 | 去掉 overflow |
| 4 | align-items:flex-start → 防止撑高 | 插件区不被拉长 |
| 5 | 用户下拉菜单 absolute 定位 | 浮动弹出不撑容器 |
| 6 | 去 !important 改用 @media 隔离 | 更干净 |
| 7 | 博客 hover 橙色线(::after 伪元素) | 移动端 display:none |
| 8 | 导航 position:static | 滚动时导航和内容一起动 |
| 9 | 删掉点击外部关闭导航的 JS | 只点汉堡开关 |
4.3 最终状态
- 点汉堡展开/收起,点外面不关
- 导航栏随页面滚动(
position:static) - 插件靠左、用户栏居中,同一行
- 博客橙色 hover 线在移动端隐藏
border-bottom保留作为分隔线
五、帖子详情页 UI 修复
| # | 问题 | 修复 |
|---|---|---|
| 1 | 面包屑显示帖子标题 → 去掉 | 删掉最后一个 <span> |
| 2 | 工具栏文字在移动端太长 | 文字用 <span class="hide-mobile"> 包裹,移动端隐藏 |
| 3 | 收藏按钮文字隐藏 | .fav-btn span { display: none } |
| 4 | 浏览/回复图标和文字间距 | .post-statsbar > .fa { margin-right: 4px } |
| 5 | 回复贴附件在操作栏内 → 移到内容下方 | 重构模板,移出 toolbar |
| 6 | 回复贴附件样式跟主帖不一致 | 统一用 .post-attachments + h4 |
| 7 | 回复贴卡片无白底 | .reply-card 加 background:#fff |
| 8 | 回复贴附件左右贴边 | 内容/附件/签名统一放进 .post-body(方案一) |
六、核心 Bug 修复
搜索功能崩溃(F5 引入)
- 原因:
searchMySQLFulltext和searchLIKE的 COUNT 查询用FROM threads(无别名),但$catFilter用了t.category_id - 修复:COUNT 查询加别名
FROM threads t
在线人数刷新就涨
- 原因:
online_users表缺少 PRIMARY KEY,REPLACE INTO变成每次都 INSERT - 修复:
REPLACE INTO→DELETE + INSERT
孤儿文件清理误删内容图
- 原因:编辑器上传的图片不进
attachments表,也不记入cover_image,清理时被当孤儿删掉 - 修复:扫描
threads/posts/blogs内容中的<img>引用加入保护白名单
七、涉及文件汇总
app/Helpers/
RememberMe.phpPoints.phpSearch.phpSettings.php
app/Controllers/
AuthController.phpSearchController.phpTagsController.php
app/Controllers/Admin/
BaseController.phpBlogController.phpCategoryController.phpDatabaseController.phpGroupController.phpLevelController.phpMaintenanceController.phpSettingsController.phpThemeController.phpThreadController.phpTrashedController.phpUserController.php
app/Core/
Autoloader.phpDatabase.phpRouter.phpTemplateCompiler.php- ~~
View.php~~(删除)
app/Views/
layouts/main.phpthread/show.phpadmin/permissions.phpadmin/settings.phpadmin/mail_settings.phpadmin/groups.phpadmin/levels.phpadmin/database.phpadmin/threads.phpadmin/blog_manage.php
assets/css/
layout.cssforum.css
plugins/
daily_checkin/hook/nav_main_links.phpdaily_checkin/hook/nav_plugin_links.php
根目录
index.php
八、备份
移动端导航布局修改前备份在 _backup_layout/:
layout.css(原始版本)main.php(原始版本)
恢复命令:
copy _backup_layout\layout.css assets\css\layout.css
copy _backup_layout\main.php app\Views\layouts\main.php