Sndow CMS 1.1.1 正式发布
本次更新共包含 18 项改进,涵盖安全强化、评论系统升级、系统健壮性提升和代码清理四个方面。建议所有用户升级。
一、评论系统升级
评论模块是本次更新的重点,从防垃圾、提体验两个方向做了改进。
新增评论图片验证码
后台系统设置 → 常规选项中新增"开启评论图片验证码"开关,默认开启。开启后访客发表评论需输入验证码,有效拦截机器垃圾评论。验证码与登录/注册验证码共用同一套机制,一次性使用,防暴力破解。
登录用户免填个人信息
已登录后台的用户在前台发表评论时,姓名和邮箱自动从会话获取,输入框隐藏显示,仅展示一条"以 xxx 身份发表评论"的提示。未登录用户保持原有填写方式不变。
修复评论相关问题
- 评论表单补全了 CSRF Token 隐藏字段,解决"安全验证失败,请刷新页面后重试"的报错
- 修复评论批量操作(审核通过、驳回、删除)时状态字段映射错误的问题
- 优化后台评论回复功能,管理员数据获取方式更稳定
二、安全强化
本轮修复了多个 Session 相关的安全问题,这些问题是之前引入 session_write_close 优化后暴露的连锁问题。
Session 全局启动
之前为性能考虑跳过了匿名前台 GET 请求的 Session 启动,但评论表单渲染 CSRF Token 时需要在 Session 关闭后重新启动,触发了"headers already sent"报错。现在改为始终在引导阶段启动 Session,从根本上消除此问题。
CSRF Token 预初始化
在 session_write_close() 之前预调用一次 sd_csrf_token(),确保 Token 生成和轮换都在 Session 可写时完成。后续模板渲染时直接读 $_SESSION 缓存,不再尝试重启 Session。
修复登录/登出的 Session 操作
- 修复 auth.php login() 中 session_regenerate_id(true) 在 Session 关闭后静默失败的问题,会话固定攻击防护现在正确生效
- 修复登录后 CSRF Token 轮换写入不持久的问题
- 修复 logout() 中 session_destroy() 在 Session 关闭后调用不会真正销毁服务端 Session 文件的问题
三、系统健壮性
- 搜索防误匹配: 文章管理页搜索关键词包含 % 等 SQL 通配符时不再异常
- 查询参数安全: 数据库 find() 方法的 LIMIT 参数做了安全校验,防止非法输入导致异常
- 插件扫描优化: 自动跳过以 . 开头的隐藏文件和 index.php 等占位文件,后台插件列表不再出现异常条目
- 安装流程优化: 对数据库配置输入做标准化处理(去除 BOM、不可见字符等),降低配置异常风险
- 插件识别修复: 默认主题文件不再被单文件识别为插件,提升插件管理准确性
四、代码清理
- 移除 common.php 中一段读取 sd_option('site_name') 后未做任何操作的死代码
- 文章类和评论类统一保留 count() 方法,保证第三方插件向前兼容
- 补充 SD_DEBUG 错误显示开关,配置文件中可直接控制 PHP 报错是否显示,方便开发调试
升级说明
本次为常规版本更新,升级包不包含 install 目录,覆盖即可。如果你修改过系统核心文件,建议先备份再升级。
下载地址:www.sndow.com