GemCMS 安全升级更新文档

开源源码 2026-10-25 12:30:42 浏览 次

GemCMS 安全升级更新文档

版本说明:安全加固包(执行方案:1A 严重+高危漏洞修复 + 2A 前端组件本地化升级 + 3A 密码透明迁移) 适配PHP版本:≥8.0,推荐 PHP 8.4 生效范围:全站核心程序、后台、用户中心、API、支付、模板、安装程序

一、本次更新概述

本次更新针对系统已识别13项严重、高危安全漏洞进行闭环修复,同步完成前端依赖本地化升级、密码体系重构,全程兼容存量用户数据,旧明文密码支持透明无感迁移;同时修复3处原生程序遗留的PHP8语法致命错误,保证程序在PHP8环境稳定运行。

本次仅处理严重/高危风险项,低危问题不在本次迭代范围内,已单独记录。

二、重要前置说明

  1. 模式:默认方案执行,用户仅确认2A,未作答项按推荐默认值执行:1A(修复严重+高危13项)+3A(密码透明迁移)

  2. 兼容性:存量用户、管理员账号无需手动重置密码;用户登录时自动完成明文密码转哈希存储

  3. 文件权限要求:gem/config.php 首次访问需要写入权限,自动生成安全密钥;密钥生成完成后,建议将该文件设置为只读

  4. 校验结果:全站共183个PHP文件,已通过PHP 8.4.27语法校验 php -l,无语法解析错误

三、更新内容明细

(一)安全基础体系加固

  1. 安全密钥随机化改造

    • 移除 common.php 硬编码固定密钥 SYS_KEY = 'Kiha'、固定盐值 !@#%!s!

    • 密钥、密码盐统一存入 gem/config.php;配置为空时,程序自动生成高随机密钥并回写配置文件

    • 修复WAF加载路径错误问题,原路径大小写、目录引用错误导致防护规则永久失效

    • 移除代码内注释的回传数据库账号密码的远程通信代码片段

  2. PHP版本适配修复(原生遗留BUG,非本次漏洞引入)

    文件问题描述修复方案
    cron.php缺少单引号语法错误,PHP8直接解析失败补全引号 exit('监控成功');
    api/dwz.php嵌套三元运算符未加括号,PHP8废弃语法调整为 GET优先,POST兜底,默认0 显式嵌套写法
    gem/lib/encipher.php$func{$i} 花括号字符串偏移语法,PHP8移除替换为标准方括号 $func[$i]

(二)密码体系重构(透明迁移)

  1. 新增密码工具函数 gem_pass_check()、gem_pass_hash(),兼容旧明文密码、新哈希密码双模式校验

  2. 登录流程(后台登录、用户登录):

    • 密码为哈希格式:使用 password_verify 校验

    • 密码为旧明文格式:校验通过后自动将明文更新为哈希值存入数据库GemCMS安全升级更新文档,透明迁移,用户无感知

  3. 后台密码修改(admin/set.php):修复BUG——表单留空时不再覆盖清空管理员密码;仅在输入新密码时,对密码做哈希存储

  4. 用户中心改密(user/user.php):旧密码兼容校验,新密码强制哈希存储;修复前端只读key可被篡改的越权漏洞

  5. 注册、找回密码:不再发送明文密码;找回密码逻辑改为生成随机密码、哈希入库,向用户推送新密码

  6. API接口 act=user:移除返回结果内明文密码字段,杜绝接口泄露密码风险

  7. 安装程序改造:不再写入固定管理员账号密码;安装时自动生成随机管理员密码,仅在安装完成页一次性展示,临时文件展示后自动删除

(三)注入类漏洞修复

  1. SQL注入防护

    • api.php 入参:host_add相关参数使用 daddslashes 过滤

    • 4套模板(ozeo/guoji/jishudh/zdmsl)sort.php / site.php / index.php:GET参数 id 强制 intval,关键词、标识字段 bs 使用 daddslashes 转义

  2. XSS跨站脚本防护

    • 用户可控字段(站点名称、简介、描述、文章标题)入库时增加 htmlspecialchars 转义

    • 后台、用户首页搜索关键词反射型XSS修复,输出层统一转义

    • 用户投稿内容使用标签过滤函数,防止恶意HTML脚本存入后台日志与文章库

(四)权限与越权漏洞修复

  1. 用户广告编辑 gg_edit:修复SQL条件错误漏洞,限制用户仅能修改自身广告

  2. 订单取消接口:增加登录态校验、订单归属校验,仅订单所属用户可取消未支付订单

  3. 后台删除备份文件:增加路径白名单、basename文件名清洗,防止路径遍历;增加同源校验

  4. CSRF防护方案

    • 后台、用户登录Cookie增加 HttpOnly + SameSite=Lax 属性,阻断跨站Cookie携带

    • admin/ajax.php 增加同源Referer校验,拦截跨站AJAX请求

    • 高危删除操作(备份文件删除)增加访问校验

(五)上传、SSRF、重定向风险修复

  1. 文件上传校验

    • 用户广告上传、后台图片上传:增加登录鉴权,未登录禁止上传

    • 增加 getimagesize 真实图片校验,拒绝伪装后缀文件;上传类型白名单过滤

  2. 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地址拉取图标

  3. go.php开放重定向:增加站点白名单,仅允许跳转至数据库内已添加的合法站点,拦截任意跳转

(六)目录访问防护与后台防爆破

  1. 备份目录 gem/backup、下载目录 gem/download:自动生成 .htaccess 拒绝所有外部访问,禁止直接浏览器浏览备份文件

  2. 后台登录防护

    • 接入验证码校验,复用系统原有captcha验证码模块

    • 登录失败计数:连续5次错误锁定10分钟,拦截暴力破解

(七)支付回调漏洞修复

  1. epay_notify_url.php、epay_return_url.php:金额对比改为差值小于0.001的浮点安全比较,规避浮点数精度判断绕过

  2. ajax.php payrmb:修复 $out_trade_no 未定义变量BUG,使用订单号作为交易单号

(八)前端依赖本地化升级(2A)

修复 jQuery、Bootstrap、Summernote 多个公开CVE漏洞,清除全部外部CDN依赖,资源本地托管

  1. 依赖版本升级清单

    组件旧版本升级后版本
    jQuery2.1.43.7.1
    Bootstrap3.3.73.4.1
    Summernote旧版0.8.20
  2. 配套资源:同步下载Summernote字体文件,保证编辑器图标正常显示

  3. 批量替换:后台、用户中心、支付页、安装页、弹窗layer、clipboard、qrcode等14+文件内所有CDN引用(baomitu、staticfile、bootcss、cdnjs)替换成本地相对路径

  4. 说明:fxmb、nb等第三方防红展示模板外链资源属于低危,不在本次修复范围

四、部署上线操作步骤

  1. 备份:升级前完整打包站点源码 + MySQL数据库,保留回滚包

  2. 覆盖文件:将本次加固后的文件覆盖至站点目录

  3. 权限检查:

    • gem/config.php 赋予写入权限(首次访问自动生成密钥)

    • gem/backup/、gem/download/ 目录确保可写入,程序自动生成防护.htaccess

  4. 访问验证:打开站点首页,触发密钥自动生成;生成成功后,建议将 gem/config.php 设置只读

  5. 功能验证清单

    • 后台登录、验证码、密码登录、改密

    • 用户注册、登录、广告上传、订单提交、取消订单

    • 支付回调、图标抓取、跳转链接、备份管理

    • 后台编辑、删除操作、模板页面访问

  6. 日志观察:上线后1~2小时查看程序报错日志,观察是否存在兼容性异常

下载地址:下载:https://wwbxp.lanzouc.com/iKos54dagh2d 密码:7jth

本文版权声明本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请联系本站客服,一经查实,本站将立刻删除。

发表评论

热门推荐