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

管理员组

🔐 安全加固

  • token 校验机制重构:新增 password_ver 字段,改密/注销时 +1 撤销所有旧 token,校验改用 ver 代替 md5(password_hash) 指纹,解决 bcrypt 自动升级误踢多设备用户的问题。补全所有改密入口(找回密码、API 改密、注销账号),USER_UPDATE_PROTECTED_FIELDS 禁止外部重置版本号。

  • token 失效自动清除 cookie:修复 user_token_get 中 setcookie 被注释导致失效 token 每次请求都触发日志,改为失败时自动清除 bbs_token

  • 模拟登录越权修复admin_token 不含 uid 仅含 IP+time,模拟期间残留 cookie 可被用于访问后台。LoginAsService 手动调用 admin_token_clean/set 清除/重签 cookie。

  • 模拟登录高危审计修复:forceEnd 不终止活跃会话(仅更新 DB 不清理 session),改为 STATUS_FORCE_ENDED 标记 + checkTimeout 真正执行 end() 恢复;end() 日志更新顺序修正为先 DB 再 session;session 过期丢失身份时自动标记 TIMEOUT;forceEnd 增加 operator_uid 记录。

  • 维护模式验证码请求放行:captcha-generate/verify 两处白名单放行,验证码内容不敏感仅图片数据。

🐛 核心 Bug 修复

  • 在线升级后版本号仍为旧版本:UpgradeService.targetVersion 用常量 XIUNOX_VERSION 初始化(OPcache 缓存旧字节码),改为从磁盘 version.php 直接读取。

  • 缓存 mkdir File exists 竞态:xiunophp.min.php 和 cache_file.class.php 的 connect()/ensure_dir()/truncate() 改用 @mkdir() + is_dir() 复核,加 function_exists 守卫防 disable_functions 环境崩溃。

  • HTMLPurifier border-radius 不支持:将 border-radius 从 CSSDefinition::doSetupProprietary() 移至 doSetup(),使其默认可用。

  • 发帖编辑器粘贴大段 Word 卡死:xnx_outlink MutationObserver 与 AIEditor 内置 observer 死循环。修复:outlink 跳过编辑器内 DOM,编辑器粘贴 >100KB 自动清理(mso-* 样式/Office 命名空间),891KB → 13KB(-98%)。同时 _captchaObserver 跳过编辑器内变化避免性能浪费。

  • 维护模式登录页验证码无法请求:白名单放行 captcha 路由(generate + verify)。

  • IP 归属地查询页三个问题:①表单 GET 提交 404——JS 拦截按 url(ip) 含 ? 选分隔符构造正确 URL;②input 默认填充访客 IP 导致混淆——删除该逻辑,URL 无 ip 时显示空;③双 ? URL 不自动查询——route/ip.php 改用 preg_match 从 REQUEST_URI 提取 ip 参数。

  • 用户组免审勾选取消不生效:PermissionService tableExists() 错误读取 $conf['db']['master']['tablepre'](键路径错误),改用 db_check_table_exists()。UpgradeService 补全 allow_direct_post/reply/profile 三个免审字段迁移。

  • xnx_fields Chrome 报 Pattern attribute 正则 SyntaxError:Chrome 112+ 启用 Unicode v 标志后字符类中 - 必须在开头/末尾,[a-z0-9_-] → [-a-z0-9_]

  • xnx_ad_selfbuy 初始化默认广告位失败:CREATE TABLE KEY 子句列引用 rank 未加反引号,MySQL 8+ 保留字报错导致表未建。

✨ 新增功能

  • xnx_carousel 左侧栏轮播插件 v1.0.0:PC 端 Bootstrap Carousel 轮播(图片+标题遮罩/指示点/悬停箭头),图片上传自动压缩宽 300px webp。

  • xnx_login_as 模拟登录插件 v1.0.7:超级管理员从后台用户列表一键切换目标用户前台,顶部蓝色提示条显示剩余时间,"返回管理后台"立即恢复身份,超时自动恢复。

  • 插件列表页改进:新增插件目录标识 badge;新增一键关闭所有已启用插件功能(带数量提示和确认弹窗)。

  • 后台搜索页排序筛选:帖子 tab 新增正序/倒序按钮(sort=asc/desc),显式切换跳过频率限制,分页携带 sort 参数。

  • 前台 IP 归属地查询页:数据源 ip9.com.cn 免费接口,10 分钟缓存,支持 ?ip=xxx 直达查询与手动输入。

  • 后台安全设置登录时效:用户登录时效(天,控制 Cookie 有效期)与管理员登录时效(分钟,控制后台超时)。

  • 邮件日志按收件人搜索:SMTP 发送日志支持收件人邮箱模糊搜索,与状态筛选可叠加。

🚀 重大升级:xnx_quest 1.3.1 → 1.4.2

  • 发现页配置:新增"发现页显示"配置组(开关/图标/名称/排序),与 xnx_checkin 对齐。

  • 我的任务页面:新增 /my-quest.htm,4 个 Tab(进行中/待领取/已完成/已拒绝),badge 计数,复用 quest_card.inc.htm。

  • 事件细拆分:原"完善资料"拆为 profile_basic_complete/avatar_upload/email_bind 三个独立事件;事件参数化(thread_create/post_create/post_like 可指定 fid,medal_grant 可指定 medal_id)。

  • 自定义任务:1-N 步串行流程,4 种动作类型(访问 URL/复制文案/上传截图/文本输入),用户分步提交证据,全部完成后提交审核。被拒绝后按 resubmit_interval 间隔才能重新提交。

  • 后台任务编辑优化:目标值字段条件隐藏;步骤编辑器动态显隐字段;勋章指定 UI 加强(检测 xnx_medal 状态)。

📦 插件详细更新

xnx_appcenter (1.15.15 → 1.15.29)

  • 自托管审核下载修复:新增 admin_review=1 参数,管理员审核下载绕过 302 跳转直接下载站内包。

  • "付费"徽章改名:"付费"→"积分兑换",避免用户误以为平台收费。

  • 自托管约束加强:仅现金支付,必须提供测试账号/密码(test_account/test_password 字段幂等迁移),前端锁死 price_credits_type=rmbs

  • 收款二维码演进:开发者上传 → 后台统一配置(上传总失败)→ 改为图片 URL 文本输入框(v1.15.23)。

  • 自托管校验修复:删除 price_credits_type !== "rmbs" 误报校验,改为强制赋值。

  • 价格模式重构为三选一(1.15.29):免费/积分兑换/现金付费 卡片式 UI,下载方式自动绑定(free/credits→官方市场、cash→自托管),新增 docs/price_guide.md 填写指南。

  • 上架前自检声明:新增 self_check_report TEXT 字段(幂等迁移),富文本编辑器必填,字数下限 100 字。

  • 开发者驳回功能rejectDeveloper() 审计状态 1→2(永久拒绝),驳回原因通知开发者。

  • 开发者提醒规则放宽:≥2 天 + ≤2 个应用。

xnx_ad_selfbuy (1.3.1 → 1.3.3)

  • 购买页时长单位动态更新(select 补 data-unit)。

  • 图片 URL 改为 type=text 避免原生校验拦截。

  • 修复默认广告位初始化失败(KEY 子句加反引号)。

xnx_outlink (1.0.4 → 1.0.5)

  • MutationObserver 跳过编辑器内 DOM 变化,避免与 AIEditor 死循环导致浏览器卡死。

🗑️ 清理与废弃

  • 删除 browser 浏览器提示页(IE6/7/8 兼容)及相关语言键/样式/函数。

📚 文档更新

  • 新增 docs/error-reporting.md:面向站长的排障手册,覆盖白屏/插件禁用/改不生效/CSRF 失败场景、后台日志入口、反馈流程。精简为宝塔面板文件管理器操作 + F12 调试,删除 SSH/命令行方式。

最新回复

请先登录后再回复 登录