🔧 核心修复:编译器加固(根治 hook 重复拼接 fatal)
model/plugin.func.php 编译器加固:
plugin_compile_srcfile_callback()在拼接 hook 内容到宿主前,强制将 hook 内容中的// hook xxx注释改写为// hook:xxx,将<!--{hook xxx}-->字符串改写为[hook: xxx]文字描述,破坏下一趟编译的正则匹配,避免_include()两趟编译机制将 hook 内容里的违规注释当作占位符再次拼接,导致同一作用域静态变量重复声明(Duplicate declaration of static variablefatal)。plugin_compile_hooks() 循环保护:加入
$s === $beforebreak 检查,避免 strpos 命中但正则不匹配时的无效 10 趟循环。根源:xnx_gift 1.1.3 前 hook 文件含
// hook post_list_inc_userinfo_actions_after.htm注释(hook 名与宿主占位符相同),每趟导致 hook 内容线性增长 1 份,10 趟后 10 份、第二趟再 10 份共 20 份,同时含<!--{hook xxx}-->时指数膨胀导致内存耗尽,最终触发 PHP 8 fatal。
🔐 安全修复
移除 DEBUG=3 超管免登录旁路:
admin/index.inc.php登录检查恢复无条件执行;index.php入口对 DEBUG 常量做严格校验(仅允许 0/1/2),非法值直接输出配置错误页(三语支持),修复 DEBUG=3 进后台报Undefined array key username的问题。新增 CLI 管理员密码重置工具:
tool/reset_password.php(仅 CLI 可运行,Web 拦截),落库逻辑对齐user_change_password(bcrypt、清 md5、password_ver+1、删 api_token、清缓存),支持用户名/邮箱/uid 定位。新增站长教程:
docs/userguide/reset-admin-password.md——邮箱找回/已登录修改/CLI 脚本/phpMyAdmin SQL 兜底四种途径,含 DEBUG=3 已移除说明。
🧹 批量清理违规注释(12 个插件)
问题:Service 类及 hook 文件中残留 // hook xxx 违规注释,被编译器正则 #//\s*hook\s+([\w\.\-]+)#is 误匹配为占位符导致重复拼接。
修复:全部改写为 // hook: xxx 冒号分隔格式。涉及插件版本号同步递增:
插件 | 版本变化 |
|---|---|
xnx_quest | 1.4.2 → 1.4.3 |
xnx_verify | 1.2.8 → 1.2.9 |
xnx_gift | 1.1.4 → 1.1.5 |
xnx_medal | 1.0.6 → 1.0.7 |
xnx_duel | 1.4.2 → 1.4.3 |
xnx_status | 2.1.0 → 2.1.1 |
xnx_invite | 1.0.3 → 1.0.4 |
xnx_reward | 1.0.7 → 1.0.8 |
xnx_dice | 1.0.1 → 1.0.2 |
xnx_checkin | 1.0.6 → 1.0.7 |
xnx_login_alert | 1.0.14 → 1.0.15 |
xnx_site_images | 1.0.0 → 1.0.1 |
🎁 xnx_gift 评论赠送积分功能完整演进(1.1.1 → 1.2.0)
v1.1.1 → v1.1.4 功能修复:
布局改造:修改核心模板
view/htm/post_list.inc.htm,评论作者信息区拆为左右两栏(d-flex justify-content-between),新增post_list_inc_userinfo_actions_after.htmhook 位置供插件复用。修复
XN.confirm回调签名(okCallback 不带参数)、options 属性名(okText/type替代confirmText/btnType)。修复 CSRF:
getCsrfToken()改从meta[name=csrf-token]读取,body 字段改csrf_token并同步发送X-CSRF-Token头。删除残留的违规注释
<!--{hook post_list_inc_userinfo_actions_extra.htm}-->,消除 fatal。清理
post_list_inc_username_after.htm空占位文件。
v1.1.5:Service 类违规注释改写(与上述批量清理同步)。
v1.1.6:
增加
define('__XNX_GIFT_REWARD_HOOK__')保护防止多趟编译导致静态变量重复声明。添加调试日志辅助排查。
清理 tmp 编译缓存。
v1.2.0(功能移除):
全面移除评论赠送积分奖励功能。
删除 hook 文件
post_list_inc_userinfo_actions_after.htm、thread_message_actions_after.htm。删除路由
route/gift_reward.php及index_route_case_end.php注册。删除
GiftService中所有 reward 相关方法。删除 setting.htm 中评论奖励配置表单。
删除
xnx_gift_reward_log表(install/uninstall/upgrade)。清空 footer_js_after.htm 中奖励相关 JS。
🆕 新插件:xnx_home_block(v1.0.0)
首页中栏顶部区块,包含轮播图 + 帖子列表 + 会员展示三合一卡片:
第一行合一卡片:左侧 42% Bootstrap Carousel 轮播(后台可配间隔 3-10 秒)+ 右侧三 Tab 帖子列表(最新/最热/精华,各 3-10 条可配)。
第二行会员卡:最新会员/活跃会员/土豪会员三 Tab 横向滑动卡片,头像优先真实头像,无头像回退首字母色块。
后台:插件设置页(条数/版块范围/会员数量/积分类型/轮播间隔/会员行开关)+ 独立轮播图管理页(Modal 编辑+删除确认)。
技术:JSON API 整包数据缓存 5 分钟,文本字段
textContent渲染防 XSS,三语言支持,兼容全部url_rewrite_on模式。
📦 xnx_appcenter(1.15.29 → 1.15.30)
新增付费应用前置信任机制(防圈钱跑路,不堵死认真开发者):
发布付费应用(积分兑换/现金付费)前,开发者必须至少有 1 个已上架的免费应用(
price_type=0 AND status=1)作为“信用铺路”。编辑分支豁免(存量已上架付费应用可继续编辑)。
前端发布页显示 alert 提示卡片,切换付费模式时高亮警示(红边框),后端兜底拦截。
三语言包新增
paid_requires_free_first(提交拦截)和paid_requires_free_hint(提示卡片含{n}占位符)。



