精华 XIUNOX 更新记录贴 202600708

此次更新为1.1.0版本上线前安全审计修复,涉及文件较多

  • [XSS风险] 修复 model/form.func.php form_text/form_hidden/form_textarea/form_password 未对 value 转义

    • 影响:所有调用 form_* 的 admin 表单编辑场景

  • [信息泄露] index.php / api/v1/bootstrap.php DEBUG 关闭(0)

  • [逻辑错误] route/user.php / route/my.php / api/v1/my.php 验证码 rand → random_int(密码学安全)

  • [边界未校验] route/user.php / route/my.php param('password') 传第 3 参 FALSE 关闭 htmlspecialchars

  • [SQL N+1] model/notify.func.php / forum_follow / thread_favorite / user_follow / post_like / thread 等 6 文件 24 处 intval 收敛

  • [CSRF防护缺失] admin/route/forum.php / route/notice.php / route/thread.php / route/forum.php / route/my.php 共 8 处补 method+CsrfService::check()

  • [状态不同步] model/session.func.php / model/user.func.php / admin/admin.func.php SameSite=None → Lax

  • [逻辑错误] api/v1/auth.php 集成 LoginSecurityService(checkIpBan/recordIpAttempt/checkBan/recordAttempt)

  • [边界未校验] service/AttachmentService.php 新增 validateMime(finfo_file)+ 图片/视频/通用 MIME 白名单

  • [边界未校验] api/v1/attach.php + route/attach.php finfo 校验 + bin2hex(random_bytes(16)) 随机文件名

  • [逻辑错误] lib/security/CaptchaService.php 验证码 5 分钟过期 + 兼容旧格式

  • [边界未校验] route/search.php 关键字长度 > 50 拦截

  • [逻辑错误] route/post.php 5min/10post RateLimitService 窗口限流

  • [XSS风险] model/notify.func.php notify_format 拦截 javascript:/data:/vbscript: 协议

  • [变量未定义] route/post.php / admin/route/thread.php / route/my.php param(N) → param(N, 0) 触发 intval

  • [组件混用] model/plugin.func.php 新增 xn_hook() 兼容层(向后兼容旧插件)

  • [配置不同步] conf/.htaccess / .htaccess Apache 2.2/2.4 双分支兼容

  • [逻辑错误] xiunophp/image.func.php + xiunophp.min.php + tool/png2jpg.php imagedestroy 用 PHP_VERSION_ID < 80000 包裹

  • [语言包不同步] zh-cn / zh-tw / en-us 新增 post_reply_rate_limited / search_keyword_too_long

  • [逻辑错误] lib/OnlineUpgradeService.php 删除 backup()/rollback() 死代码,改为提醒用户手动备份

  • [逻辑错误] 修复 lib/OnlineUpgradeService.php backup() 方法引用已删除的 $backupBasePath 属性导致运行时报错

    • 根因:$backupBasePath 属性已在之前会话删除,但 backup() 方法遗漏未删;admin/route/online_upgrade.php 已移除 backup 步骤,该方法为死代码

    • 同步删除仅被 backup() 调用的 recursiveCopy() 辅助方法

    • 必测: admin/?online_upgrade.htm(升级流程不再触发 backup 步骤)

  • [逻辑错误] 修复 route/notice.php L255 action 名 'delete' → 'list'(复制粘贴错误)

    • 根因:L255 显示的是 admin_notice_list.htm 列表页,action 名误写为 'delete',导致 L378 真正的 delete 分支永不执行

    • 影响:后台通知删除功能失效

    • 必测: admin/?notice-list.htm(列表页可访问)+ admin/?notice-delete.htm(删除生效)

  • [XSS风险] 修复 view/htm/post_list.inc.htm 文本节点未转义(发现 1)

    • L40/L220 username、L46 group_name、L65 subject、L225 reply group_name、L234 reply_to_username 统一加 esc_html

    • 必测: 帖子详情页回复列表用户名/用户组/标题显示

  • [XSS风险] 修复 view/htm/post_list.inc.htm HTML 属性未转义(发现 2)

    • L144/L260 data-username 未 esc_attr(对比 L170/L274 已转义)

    • 必测: 帖子详情页点击「回复」按钮触发引用

  • [XSS风险] 修复 admin/view/htm/thread_list.inc.htm 后台帖子列表未转义

    • L42/L82 subject、L54/L94 username、L55/L95 forumname 统一加 esc_html

    • 必测: admin/?thread-list.htm 显示帖子列表

  • [XSS风险] 修复 admin/view/htm/online_upgrade.htm innerHTML 注入(发现 5)

    • 新增 escapeHtml() JS 函数,所有拼接 res.message / xhr.responseText / msg / warnings[i] / r.name / r.message 的 innerHTML 改用 escapeHtml 包裹

    • 涉及 13 处 innerHTML 拼接点

    • 必测: admin/?online_upgrade.htm 检查更新/前置检查/升级步骤/重装

  • [XSS风险] 修复 plugin/xnx_medal/view/htm/medal_detail.htm L147 img src 未转义(发现 7)

    • 必测: 勋章详情页获奖用户列表头像显示

  • [XSS风险] 修复 view/htm/header.inc.htm URL/Token 字段未转义(发现 8)

    • L41/L50 canonical、L48 sitename、L53/L59 og_image、L67 csrf_token、L68 api_default_appid 统一加 esc_attr

    • 必测: 前台所有页面 meta 标签查看源码

  • [逻辑错误] xnx_invite 邀请记录 IP 筛选由精确匹配改为 C 段匹配(/24),输入任一完整 IP 即匹配同网段所有记录

    • 必测: admin/?plugin-setting-xnx_invite.htm&tab=logs,IP 框输入 195.3.223.181 应同时查出 .50 等同 C 段记录

    • 回归: IP 筛选输入非法值仍返回空结果

  • [配置不同步] 精简多语言支持,仅保留 zh-cn / zh-tw / en-us,删除 ja-jp / ko-kr / ru-ru / th-th

    • 删除 lang/ 下 4 个语言包目录(含 bbs.php/bbs_admin.php/bbs_common.php/bbs_install.php/bbs.js)

    • 同步清理 9 处引用:route/lang.php supported、admin/route/setting.php form_select、view/htm/header_nav.inc.htm、admin/view/htm/header_nav.inc.htm、index.inc.php lang_map、lib/EditorService.php mapLangCode、xiunophp/misc.func.php browser_lang、install/index.php 3 处、tools/lang_sync_check.php locales

    • 清理保留语言包(en-us/zh-cn/zh-tw)中 lang_ru_ru/lang_th_th/lang_ko_kr/lang_ja_jp 4 个死键

    • 清理 tmp 编译缓存:view_htm_header_nav.inc.htm、admin_view_htm_header_nav.inc.htm、index.inc.php、lang_zh-cn_bbs.php、lang_zh-cn_bbs_admin.php

    • 必测: 前后台语言切换下拉只剩 3 项、admin/?setting-base.htm 语言选择、安装程序语言选择

    • 回归: 浏览器自动语言检测、编辑器语言映射

  • [逻辑错误] 修复 admin/route/forum.php 编辑版块 action 分支名 'delete' → 'update'(复制粘贴错误)

    • 根因:L201 本该是 update 分支,误标为 delete,导致 forum-update-4.htm 无匹配分支页面空白;同时假 delete 分支拦截了 L405 真 delete,删除版块功能也失效

    • 同步删除 delete 专属的 Method Error 守卫和前置 CsrfService::check(update 需支持 GET 显示表单,POST 分支内已有 CSRF 检查)

    • 清理排查时残留的 xn_log 调试日志

    • 必测: admin/?forum-update-4.htm(编辑表单可打开并保存)

    • 回归: admin/?forum-list.htm(列表页)+ 版块删除功能(forum-delete 走真 delete 分支)

  • [信息泄露] conf.php 明文密码环境变量化

    • 修复: conf/conf.php 第12/28行 DB密码(XIUNO_DB_PASSWORD)、第53行 Redis密码(XIUNO_REDIS_PASSWORD)、第90行 auth_key(XIUNO_AUTH_KEY)、第126行 DeepSeek API Key(XIUNO_DEEPSEEK_KEY)、第396行 api_default_secret(XIUNO_API_DEFAULT_SECRET) 改为 getenv() 读取,保留原值作为回退

    • 删除: conf/smtp.conf.php(含明文 SMTP 密码 admin111)

    • 必测: 首页正常加载、登录发帖、Redis缓存命中、AI编辑器调用、API接口鉴权

    • 回归: 后台设置页保存、邮件发送功能

  • [边界未校验] 修复 API 层注册/更新用户输入未校验(5 高危 + 1 中危)

    • api/v1/auth.php register: email 加 is_email、username 加 is_username、password param 第3参 FALSE 关闭 htmlspecialchars

    • api/v1/user.php 管理员更新: username 非空时 is_username、email 非空时 is_email、password param 第3参 FALSE

    • 复用 model/check.func.php 的 is_email/is_username(含长度+格式校验),与 route/user.php:548,552 及 api/v1/admin.php:430,433 现有模式一致

    • 校验失败: auth.php 并入 $errors 数组走 validationError;user.php 单字段失败直接 validationError(422)

    • 必测: POST /api/v1/auth/register(非法邮箱/非法用户名/含 <> 的密码)

    • 回归: PUT /api/v1/user/{uid} 管理员更新用户信息

  • [新功能] 新增 xnx_icon 图标生成器插件(可视化合成 Tabler Icons 图标,导出 SVG/PNG)

    • 必测: 后台插件管理页安装启用 xnx_icon → admin/?plugin-setting-xnx_icon.htm

    • 功能: 图标搜索筛选/背景(纯色·渐变·无)/形状(圆·圆角·方)/圆角滑块/四角角标/尺寸预设/实时预览/4内置预设+自定义CRUD/复制·下载SVG·下载PNG

    • 数据: icons.json 含 5093 图标元数据+path(1.7MB,页面级懒加载)

    • 修正: setting.htm 误用 CsrfService::token() → getToken()(方法名不存在导致白屏)[逻辑错误]

最新回复
  • Laity 内测用户2级用户连续签到7天 Lv2
    该发插件了🤔
    4天前
  • Laity 内测用户2级用户连续签到7天 Lv2

    1.0.8出现报错

    1.所有低栏全报错 就是https://foums没有域名显示直接报错

    2.本站发帖效验效验失败无法发帖

    4天前
  • Laity 内测用户2级用户连续签到7天 Lv2
    最新问题后台手机端侧边栏点击没反应以及后台主页插件管理点击无反应
    3天前

请先登录后再回复 登录

uid:1 管理
关注
随遇而安,随缘而行
发帖 71
评论 319
粉丝 11
关注 1
发新帖
目录
XIUNOX 更新记录贴 202600708