GemCMS 安全升级更新文档
版本说明:安全加固包(执行方案:1A 严重+高危漏洞修复 + 2A 前端组件本地化升级 + 3A 密码透明迁移) 适配PHP版本:≥8.0,推荐 PHP 8.4 生效范围:全站核心程序、后台、用户中心、API、支付、模板、安装程序
一、本次更新概述
本次更新针对系统已识别13项严重、高危安全漏洞进行闭环修复,同步完成前端依赖本地化升级、密码体系重构,全程兼容存量用户数据,旧明文密码支持透明无感迁移;同时修复3处原生程序遗留的PHP8语法致命错误,保证程序在PHP8环境稳定运行。
本次仅处理严重/高危风险项,低危问题不在本次迭代范围内,已单独记录。
二、重要前置说明
模式:默认方案执行,用户仅确认2A,未作答项按推荐默认值执行:1A(修复严重+高危13项)+3A(密码透明迁移)
兼容性:存量用户、管理员账号无需手动重置密码;用户登录时自动完成明文密码转哈希存储
文件权限要求:
gem/config.php首次访问需要写入权限,自动生成安全密钥;密钥生成完成后,建议将该文件设置为只读校验结果:全站共183个PHP文件,已通过PHP 8.4.27语法校验
php -l,无语法解析错误
三、更新内容明细
(一)安全基础体系加固
安全密钥随机化改造
移除
common.php硬编码固定密钥SYS_KEY = 'Kiha'、固定盐值!@#%!s!密钥、密码盐统一存入
gem/config.php;配置为空时,程序自动生成高随机密钥并回写配置文件修复WAF加载路径错误问题,原路径大小写、目录引用错误导致防护规则永久失效
移除代码内注释的回传数据库账号密码的远程通信代码片段
PHP版本适配修复(原生遗留BUG,非本次漏洞引入)
文件 问题描述 修复方案 cron.php 缺少单引号语法错误,PHP8直接解析失败 补全引号 exit('监控成功');api/dwz.php 嵌套三元运算符未加括号,PHP8废弃语法 调整为 GET优先,POST兜底,默认0显式嵌套写法gem/lib/encipher.php $func{$i}花括号字符串偏移语法,PHP8移除替换为标准方括号 $func[$i]
(二)密码体系重构(透明迁移)
新增密码工具函数
gem_pass_check()、gem_pass_hash(),兼容旧明文密码、新哈希密码双模式校验登录流程(后台登录、用户登录):
密码为哈希格式:使用
password_verify校验密码为旧明文格式:校验通过后自动将明文更新为哈希值存入数据库
,透明迁移,用户无感知后台密码修改(admin/set.php):修复BUG——表单留空时不再覆盖清空管理员密码;仅在输入新密码时,对密码做哈希存储
用户中心改密(user/user.php):旧密码兼容校验,新密码强制哈希存储;修复前端只读key可被篡改的越权漏洞
注册、找回密码:不再发送明文密码;找回密码逻辑改为生成随机密码、哈希入库,向用户推送新密码
API接口
act=user:移除返回结果内明文密码字段,杜绝接口泄露密码风险安装程序改造:不再写入固定管理员账号密码;安装时自动生成随机管理员密码,仅在安装完成页一次性展示,临时文件展示后自动删除
(三)注入类漏洞修复
SQL注入防护
api.php 入参:host_add相关参数使用
daddslashes过滤4套模板(ozeo/guoji/jishudh/zdmsl)sort.php / site.php / index.php:GET参数
id强制intval,关键词、标识字段bs使用daddslashes转义XSS跨站脚本防护
用户可控字段(站点名称、简介、描述、文章标题)入库时增加
htmlspecialchars转义后台、用户首页搜索关键词反射型XSS修复,输出层统一转义
用户投稿内容使用标签过滤函数,防止恶意HTML脚本存入后台日志与文章库
(四)权限与越权漏洞修复
用户广告编辑
gg_edit:修复SQL条件错误漏洞,限制用户仅能修改自身广告订单取消接口:增加登录态校验、订单归属校验,仅订单所属用户可取消未支付订单
后台删除备份文件:增加路径白名单、basename文件名清洗,防止路径遍历;增加同源校验
CSRF防护方案
后台、用户登录Cookie增加
HttpOnly+SameSite=Lax属性,阻断跨站Cookie携带admin/ajax.php增加同源Referer校验,拦截跨站AJAX请求高危删除操作(备份文件删除)增加访问校验
(五)上传、SSRF、重定向风险修复
文件上传校验
用户广告上传、后台图片上传:增加登录鉴权,未登录禁止上传
增加
getimagesize真实图片校验,拒绝伪装后缀文件;上传类型白名单过滤SSRF防护(favicon图标接口)
api/index.php、icoapi/index.php、apico/ico.php、ico/index.php 统一增加
is_public_url()校验函数拦截内网地址、保留网段(127.0.0.1、10段、192.168段、172.16~31段、169.254段),仅允许公网HTTP/HTTPS地址拉取图标
go.php开放重定向:增加站点白名单,仅允许跳转至数据库内已添加的合法站点,拦截任意跳转
(六)目录访问防护与后台防爆破
备份目录
gem/backup、下载目录gem/download:自动生成.htaccess拒绝所有外部访问,禁止直接浏览器浏览备份文件后台登录防护
接入验证码校验,复用系统原有captcha验证码模块
登录失败计数:连续5次错误锁定10分钟,拦截暴力破解
(七)支付回调漏洞修复
epay_notify_url.php、epay_return_url.php:金额对比改为差值小于0.001的浮点安全比较,规避浮点数精度判断绕过
ajax.php payrmb:修复
$out_trade_no未定义变量BUG,使用订单号作为交易单号
(八)前端依赖本地化升级(2A)
修复 jQuery、Bootstrap、Summernote 多个公开CVE漏洞,清除全部外部CDN依赖,资源本地托管
依赖版本升级清单
组件 旧版本 升级后版本 jQuery 2.1.4 3.7.1 Bootstrap 3.3.7 3.4.1 Summernote 旧版 0.8.20 配套资源:同步下载Summernote字体文件,保证编辑器图标正常显示
批量替换:后台、用户中心、支付页、安装页、弹窗layer、clipboard、qrcode等14+文件内所有CDN引用(baomitu、staticfile、bootcss、cdnjs)替换成本地相对路径
说明:fxmb、nb等第三方防红展示模板外链资源属于低危,不在本次修复范围
四、部署上线操作步骤
备份:升级前完整打包站点源码 + MySQL数据库,保留回滚包
覆盖文件:将本次加固后的文件覆盖至站点目录
权限检查:
gem/config.php赋予写入权限(首次访问自动生成密钥)gem/backup/、gem/download/目录确保可写入,程序自动生成防护.htaccess访问验证:打开站点首页,触发密钥自动生成;生成成功后,建议将
gem/config.php设置只读功能验证清单
后台登录、验证码、密码登录、改密
用户注册、登录、广告上传、订单提交、取消订单
支付回调、图标抓取、跳转链接、备份管理
后台编辑、删除操作、模板页面访问
日志观察:上线后1~2小时查看程序报错日志,观察是否存在兼容性异常
下载地址:下载:https://wwbxp.lanzouc.com/iKos54dagh2d 密码:7jth










发表评论