[审计]SoSite 发布评估报告

👑Lv.11 元老 🌞 骨干会员
2026-10-25 00:05:19

本文由 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 防护手动 htmlspecialcharsTemplateCompiler 自动转义 + 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~2000Session文件读写 + PHP-FPM进程数
并发在线50~200Apache mpm_prefork 配置
发帖/回复 (日)500~2000Settings::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"到现在的"多层防御体系+用户组权限系统+完整认证机制",项目安全性经历了质的飞跃。当前剩余问题集中在:

  1. 插件层权限一致性 — QA 独立于论坛权限体系(不影响主论坛数据安全)
  2. RateLimiter Session 依赖 — 但配合验证码 + CSRF 双重防护,实际攻击门槛高
  3. 性能优化 — 当前架构支撑 500~2000 DAU 无压力

一句话:可以发布,安全过线,功能完整,性能够用。

轻量级、高性能、零 MySQL 依赖的PHP社区系统。
| 瀏覽 5 次 | 回覆 0 次

全部回覆 (0)

暫無回覆

請 登入