本文由 FlintHub 开发文档归档发布。原始文档日期见标题前缀,来源:7月5日复制的资料/发布评估报告_20260703.md。
SoSite 发布评估报告
评估日期:2026-07-03
评估范围:安全防护 / 性能负载 / 功能完整性 / 发布风险
评估方法:逐文件代码审查 + 架构分析 + 攻防视角模拟
一、安全评估总览
1.1 安全修复历史(已完成 50+ 项)
经过三轮大规模安全修复和一轮深度审查,SoSite 的安全防护体系已从最初的黑名单模式全面升级为白名单 + 多层防御模式:
| 防护维度 | 修复前 | 当前 |
|---|
| 文件上传 | 黑名单(.php/.phtml 可绕过) | 白名单 + MIME 无条件校验 + 随机文件名 |
| ZIP 解压 | 无校验 | 逐文件白名单 + 路径穿越防护 + 二次清理 |
| 插件系统 | include 无路径校验 | realpath() + 目录白名单 + EXTR_SKIP |
| CSRF 防护 | 部分遗漏 | 全站 POST 接口覆盖 + Token 轮换 |
| SQL 注入 | $dbType 分支 + 拼接 | PDO 参数化 + sanitizeOrderBy + buildWhere key 过滤 |
| XSS 防护 | 手动 htmlspecialchars | TemplateCompiler 自动转义 + Content.php 净化 + DOM 过滤 |
| 权限控制 | 无 | 用户组 + 版块权限 + 管理员组自动跳过 |
| SSRF 防护 | 无 | DNS 解析 + 私有网段过滤 |
| 开放重定向 | 无 | 路径白名单(仅 / 开头) |
1.2 当前安全评分
| 维度 | 评分 | 说明 |
|---|
| 文件上传安全 | ⭐⭐⭐⭐⭐ | 白名单+MIME+随机名+缩略图安全+Imagick配置 |
| SQL 注入防护 | ⭐⭐⭐⭐⭐ | PDO + 参数化 + key过滤 + sanitizeOrderBy |
| XSS 防护 | ⭐⭐⭐⭐⭐ | 模板自动转义 + HTML净化 + CSP头 |
| CSRF 防护 | ⭐⭐⭐⭐☆ | 全站POST覆盖 + Token轮换(缺双重提交Cookie模式) |
| 权限控制 | ⭐⭐⭐⭐☆ | 用户组+版块权限基本完整(插件层有遗漏) |
| 认证安全 | ⭐⭐⭐⭐⭐ | bcrypt密码 + Session HttpOnly + SameSite |
| 插件系统 | ⭐⭐⭐⭐☆ | realpath校验 + try-catch + LOCK_EX |
| 整体安全 | ⭐⭐⭐⭐☆ | 中小型论坛已足够安全 |
1.3 剩余风险(可接受级别)
| 风险 | 等级 | 说明 |
|---|
| 收藏列表泄露无权版块标题 | 🟡 已修复 | 本次会话已修复 |
| QA 问答插件绕权限系统 | 🟡 已部分修复 | 加了限流但未加版块权限(QA 独立于 categories) |
| RateLimiter 基于 Session | 🟡 已知 | 攻击者不携带 Cookie 可绕过;但配合验证码(注册)和 CSRF 防护,实际利用门槛高 |
| 插件系统绕过权限检查 | 🟡 低 | post_favorite 已修复;QA 独立体系不影响主论坛数据 |
| SMTP 密码明文存储 | 🟢 低 | 存储在 settings 表,经后台管理页面设置,需管理员权限 |
二、性能与负载评估
2.1 架构性能特点
| 特性 | 评价 |
|---|
| 数据库查询 | ⭐⭐⭐⭐☆ 多数查询已参数化+索引优化(3个复合索引已建) |
| N+1 查询 | ⭐⭐⭐⭐⭐ 无循环查询,投票使用批量 WHERE IN |
| 缓存机制 | ⭐⭐⭐⭐☆ 文件缓存 + 运行时计数器(settings_cache.php) |
| 模板引擎 | ⭐⭐⭐⭐⭐ 原生 PHP + 编译缓存,零开销 |
| Session 存储 | ⭐⭐⭐⭐☆ 文件存储(非默认路径),无 Redis(环境限制) |
| 分页查询 | ⭐⭐⭐⭐☆ 使用延迟关联(子查询先取 ID)优化 |
2.2 负载能力估算
基于当前架构(PHP 8.2 + MySQL + Apache,无 Redis/OPcache 扩展):
| 场景 | 预估能力 | 瓶颈点 |
|---|
| 日活用户 (DAU) | 500~2000 | Session文件读写 + PHP-FPM进程数 |
| 并发在线 | 50~200 | Apache mpm_prefork 配置 |
| 发帖/回复 (日) | 500~2000 | Settings::runtimeIncr() 每次写DB |
| 搜索 | 1000+次/日 | FULLTEXT索引已建,性能良好 |
| 附件上传 | 200+次/日 | 缩略图生成依赖 Imagick/GD |
2.3 已知性能瓶颈
| 问题 | 影响 | 建议 |
|---|
Settings::runtimeIncr() 每次写DB | 每次发帖/回复都写settings表 | 可改为内存累积 + 请求结束时统一写 |
Category::getThreadCountMap() 全表 GROUP BY | 首页/论坛页每次加载 | 可加冗余计数或缓存 |
online_users 表每次请求 DELETE+INSERT | 每个已登录请求都操作 | 数据量小,影响不大 |
Thread::getLatest() 子查询 | 已用延迟关联优化,当前规模够用 | — |
三、发布标准检查清单
✅ 通过项
| 检查项 | 状态 | 备注 |
|---|
| SQL 注入防护 | ✅ 通过 | 全站 PDO 参数化查询 |
| XSS 防护 | ✅ 通过 | 模板自动转义 + 双重净化 |
| CSRF 防护 | ✅ 通过 | 全站 POST + Token 轮换 |
| 文件上传安全 | ✅ 通过 | 白名单 + MIME + 随机名 |
| 用户认证安全 | ✅ 通过 | bcrypt + HttpOnly + SameSite |
| 密码找回流程 | ✅ 具备 | SMTP 验证邮件 |
| 邮箱验证机制 | ✅ 具备 | 注册后验证 |
| 管理员二次验证 | ✅ 具备 | 30 分钟超时 |
| 后台权限隔离 | ✅ 通过 | BaseController 拦截 |
| 敏感信息不泄露 | ✅ 通过 | 500错误隐藏 |
| 数据库备份功能 | ✅ 具备 | 后台备份 + 优化 |
| 插件独立性 | ✅ 通过 | 钩子隔离 + 路径防护 |
⚠️ 建议优化项(非阻塞)
| 检查项 | 状态 | 建议 |
|---|
| 安装向导界面 | ⚠️ 简陋 | 纯文本安装页面,建议美化 |
| 默认 SMTP 配置 | ⚠️ 需人工设置 | 后台邮件设置页面已可用 |
| 隐私政策/条款 | ⚠️ 未提供 | 如需合法合规需要补充 |
| Robots.txt | ⚠️ 未提供 | 建议加上 |
| 版本号显示 | ✅ 已有 | config.php 中 SOSITE_VERSION |
❌ 未通过项(不影响发布的安全)
| 检查项 | 说明 |
|---|
| 移动端导航适配 | 已修,但复杂交互场景可能仍有小瑕疵 |
| 部分 CSS 内联样式 | 已提取到 CSS 文件,但少数页面可能残留 |
四、发布建议
4.1 推荐发布评级:可发布(Beta 级别)
如果你用于个人博客/小型社区(<500 日活),当前版本已经完全可用。如果用于中型社区(>1000 日活),建议先处理以下事项:
4.2 发布前建议做
| 事项 | 重要性 | 操作 |
|---|
| 1. 确认 config.php 配置 | ⭐⭐⭐⭐⭐ | 修改数据库密码、SMTP 配置 |
2. 运行 protected/database/init.php | ⭐⭐⭐⭐⭐ | 确保所有表和索引已建 |
3. 删除 install_user_groups.php | ⭐⭐⭐⭐ | 迁移脚本用完后删除 |
| 4. 删除备份文件 | ⭐⭐⭐⭐ | _backup_* 目录 |
5. 设置 site_closed = 0 | ⭐⭐⭐⭐⭐ | 否则站点显示维护模式 |
| 6. 配置 .htaccess | ⭐⭐⭐⭐⭐ | URL 重写 + 安全目录隔离 |
| 7. 删除 .bak 文件 | ⭐⭐⭐ | 清理开发备份 |
4.3 部署后监控要点
| 监控项 | 正常值 | 警告阈值 |
|---|
| PHP 错误日志 | 无 | 出现 SQL 错误/500 |
| Session 目录文件数 | < 500 | > 2000(需清理机制) |
| 附件上传目录大小 | — | > 1GB(注意磁盘空间) |
| 注册频率 | 按需 | 异常激增(检查 RateLimiter) |
4.4 中长期优化路线图
| 阶段 | 内容 | 优先级 |
|---|
| 近期 | 邮箱 SMTP 稳定运行、修复可能的插件兼容问题 | 高 |
| 中期 | RateLimiter 改为 DB 存储、runtimeIncr 批量写 | 中 |
| 长期 | 添加 Redis 缓存、SQL 一致性迁移(移入 Helper) | 低 |
五、最终结论
SoSite V3.9.0 已达到可发布标准。
从初次审查时的"黑名单绕过可上传 WebShell"到现在的"多层防御体系+用户组权限系统+完整认证机制",项目安全性经历了质的飞跃。当前剩余问题集中在:
- 插件层权限一致性 — QA 独立于论坛权限体系(不影响主论坛数据安全)
- RateLimiter Session 依赖 — 但配合验证码 + CSRF 双重防护,实际攻击门槛高
- 性能优化 — 当前架构支撑 500~2000 DAU 无压力
一句话:可以发布,安全过线,功能完整,性能够用。