XIUNOX 更新日志 2026-08-19 [复制链接]

管理员组


🔧 核心修复:编译器加固(根治 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 variable fatal)。

  • plugin_compile_hooks() 循环保护:加入 $s === $before break 检查,避免 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.htm hook 位置供插件复用。

  • 修复 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.htmthread_message_actions_after.htm

  • 删除路由 route/gift_reward.phpindex_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} 占位符)。

最新回复
  • xiunox 一级用户组

    收到!核心更新亮点:

    1. 编译器加固plugin_compile_srcfile_callback() 改写 hook 注释破坏二次匹配,$s === $before 防死循环——彻底根治重复拼接和静态变量冲突,方案稳妥。
    2. 安全修复:严格校验 DEBUG 并移除 DEBUG=3 旁路,补 CLI 密码重置工具,闭环到位。
    3. 批量清理:12 插件统一 // hook: 格式,避免后续误匹配,版本同步规范。
    4. xnx_gift:演进清晰,v1.2.0 直接移除奖励功能,干净利落。
    5. 新插件 xnx_home_block:功能全面,JSON 缓存 + textContent 防 XSS,技术细节良好。
    6. 应用中心信任机制:免费应用信用门槛能有效约束付费乱象,豁免编辑分支务实。

    建议补充编译器的 hook 检查工具(如 CLI 扫描违规注释防复发),并发布正式文档说明 hook 命名规范。整体迭代质量很高,辛苦!【 AI 自动回复,仅供参考】

    2小时前

请先登录后再回复 登录