[开发]SoSite 完整修复会话归档

👑Lv.11 元老 🌞 骨干会员
2026-10-23 23:58:06

本文由 FlintHub 开发文档归档发布。原始文档日期见标题前缀,来源:7月5日复制的资料/会话归档_20260703.md。

SoSite 完整修复会话归档

会话日期:2026-07-03

涉及文件:约 30+ 个文件

修复类型:安全漏洞 / 逻辑缺陷 / 代码冗余 / 架构清理 / 移动端适配 / UI 细节


一、审查验证

对照《全面代码审查报告_20260703.md》逐条验证 21 项问题:

结果数量占比
✅ 问题真实存在1780.9%
⚠️ 描述有偏差29.5%
✅ 已修复(报告未标注)29.5%
❌ 误报00%

报告准确率约 90%。


二、修复清单

第1天 — 安全修复

#问题文件改动
F1RememberMe Token 不轮换app/Helpers/RememberMe.php登录成功后生成新 token,更新 DB + Cookie
F2renderBadge() 图标/标题 XSSapp/Helpers/Points.phpicon/title 加 htmlspecialchars
F3Maintenance GET 请求 CSRF 泄露app/Controllers/Admin/MaintenanceController.php + app/Views/admin/maintenance.php$_GET → $_POST,链接改表单
F4500 错误信息泄露index.php详情写入 error_log,页面只显示通用提示

第2天 — 逻辑修复

#问题文件
F6邮件发送结果未检查app/Controllers/AuthController.php
F7TagsController 未分页app/Controllers/TagsController.php
F8hook('init_after') 重复调用index.php
F9$filteredRawThreads 未初始化app/Controllers/SearchController.php
F10ensureEmailVerifyColumns() 重复app/Controllers/AuthController.php

第3天 — 架构清理

#问题文件
F11双模板引擎(删 View.php)app/Core/Router.php, app/Core/View.php(删)
F12-F13getDbType/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→DBapp/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 布局底部两栏布局
3overflow:hidden → 插件下拉被裁去掉 overflow
4align-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.php
  • Points.php
  • Search.php
  • Settings.php

app/Controllers/

  • AuthController.php
  • SearchController.php
  • TagsController.php

app/Controllers/Admin/

  • BaseController.php
  • BlogController.php
  • CategoryController.php
  • DatabaseController.php
  • GroupController.php
  • LevelController.php
  • MaintenanceController.php
  • SettingsController.php
  • ThemeController.php
  • ThreadController.php
  • TrashedController.php
  • UserController.php

app/Core/

  • Autoloader.php
  • Database.php
  • Router.php
  • TemplateCompiler.php
  • ~~View.php~~(删除)

app/Views/

  • layouts/main.php
  • thread/show.php
  • admin/permissions.php
  • admin/settings.php
  • admin/mail_settings.php
  • admin/groups.php
  • admin/levels.php
  • admin/database.php
  • admin/threads.php
  • admin/blog_manage.php

assets/css/

  • layout.css
  • forum.css

plugins/

  • daily_checkin/hook/nav_main_links.php
  • daily_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

轻量级、高性能、零 MySQL 依赖的PHP社区系统。
| 浏览 3 次 | 回复 0 次

全部回复 (0)

暂无回复

请 登录