Commit Graph
326 Commits
Author SHA1 Message Date
ypsdf1 e440dea033 第57批续8-2: 毛玻璃切一刀——overlay去blur只压暗,card提高透明度让背景透出(从全雾化改为真毛玻璃) 2026-10-26 17:24:10 +08:00
ypsdf1 79b75a0f76 第57批续8: 第4次修毛玻璃——根因修复backdrop-filter嵌套失效;overlay增强blur+降透明度,card去backdrop-filter+降透明度 2026-10-26 17:00:50 +08:00
ypsdf1 c4f6f2fa1c 第57批续7: 弹窗毛玻璃+抽屉式动画;PHP不再重复验密改为验证码确认;绑定完成直接进验证码步骤 2026-10-26 16:27:29 +08:00
ypsdf1 3c8b573d05 第57批续6: 修复2个bug
1. modal弹窗加毛玻璃效果(backdrop-filter blur)
3. acctBindEmailPwdStep显示modalOverlay(批准后卡死修复)
2026-10-26 14:58:42 +08:00
ypsdf1 5175cb46fb 第57批续5: 修复2个bug
3. acctBindEmailFinish rejected状态简化为单关闭按钮(Bug#3)
4. drawer-card毛玻璃效果修正(Bug#4)
2026-10-26 13:15:12 +08:00
ypsdf1 c8a7cd73a6 第57批续4:绑邮箱向导展示可绑定邮箱类型+drawer卡片毛玻璃效果 2026-10-26 12:00:57 +08:00
ypsdf1 6d93d69226 第57批续3:无充值规则时隐藏在线充值入口
- 头部计算 HAS_RECHARGE_RULES(查 orders.db shop_configs is_active=1 计数)
- 侧边栏 recharge 项按 HAS_RECHARGE_RULES 显示/隐藏
- <script> 注入 hasRechargeRules JS 变量
2026-10-26 10:49:39 +08:00
ypsdf1 203545a719 第57批:新增clear_bans接口(cancel ban确认解封时清空PHP封禁数据) 2026-10-25 21:31:22 +08:00
ypsdf1 716d43b8c2 第56批:checkEmailSuffix移至core.php共享(register/account可直接调用) 2026-10-25 18:57:49 +08:00
ypsdf1 80c4073445 第56批:修复webEmailBindResult非法action+后缀三模式校验(Java权威)+绑定邮箱抽屉动画 2026-10-25 18:40:35 +08:00
ypsdf1 fe882cf73a 第56批:修复webEmailBindResult「非法action」报错 - action只从POST body读,避免URL路由参数污染 2026-10-25 18:17:57 +08:00
ypsdf1 685a1dace2 第55批:login_verified=0时清除web_login_verified旧记录,防止残留导致Web端误放行 2026-10-25 17:37:21 +08:00
ypsdf1 f2859fe6e5 第53批:网页绑邮箱三接口+前端向导——不拦截改游戏内60秒批准,密码复核+IP连错5次封5分钟 2026-10-23 23:01:59 +08:00
ypsdf1 3a4252e861 第52批: 修复\/JSON转义脏值PHP侧(清洗函数+比对容错+存量自愈)
- core.php新增b64Clean(base64白名单清洗)与cleanB64DirtyOnce(存量清洗,自备.b64clean标记挂migrateDatabase锁前)
- 比对点接入b64Clean: core.php临时/主密码验证, account.php第一层比对与改密回读, sync.php改密旧密码验证
- 根因: PHP json_encode默认把base64中的/转义成\/,Java历史解析层漏还原写进库,hash脏值致两端密码恒错; 本侧为第52批四层防护的PHP半边
2026-10-23 19:21:26 +08:00
ypsdf1 4acb6712cd 修复第48批改密弹窗按钮永久禁用:checklist守卫改用_acctPwdSubmitting标志 2026-10-23 14:26:28 +08:00
ypsdf1 a0aeabf22d 第48批(2/2):网页改密强度对齐游戏+实时校验+成功面板留屏;容错解盐修脏盐玩家网页端恒密码错误;bing壁纸代理地址补api前缀
- core.php: 新增 pwdRuleError(6-20位+大写+小写+数字,与游戏 PasswordUtils.validate 同一把尺子)
  与 saltDecode(镜像Java清洗,strict解码前先剔除非base64字符)
- account.php: acctChangePassword 套用 pwdRuleError;acctPwdCheck 改走 saltDecode
- sync.php: changePassword/resetPassword 套用 pwdRuleError;changePassword 老密码校验改走 saltDecode
- player.php: 改密弹窗加实时4项校验清单(oninput更新✓/✗,全绿才可提交);
  成功后不关弹窗,展示明文新密码+复制按钮+同步说明(供截屏保存),保留 notifyJavaSync
- wallpaper.php: bing/NASA 代理地址补 api/ 前缀(原相对路径经前端路由转发后404);
  缓存键 bing->bing_v2(旧6h缓存存着坏URL,版本化立即生效)
2026-10-23 11:48:27 +08:00
ypsdf1 d0cdadd29d 第47批:2FA绑定状态双向同步(pull_state/push_state);图片壁纸下卡片/侧栏半透明毛玻璃自适应;壁纸源改四级fallback(必应主域/中国镜像/NASA APOD/picsum兜底)+转发白名单扩充 2026-10-22 23:24:32 +08:00
ypsdf1 3e2bd64a70 第46批:修复账号安全卡二维码扫不出(换Arase SVG带静区方案,提取qrcode-svg.js复用twofa_qr库);用户端&管理员端背景系统升级三模式(纯色/图片URL/必应API壁纸,遮罩强度可调,新增api/wallpaper.php代理带缓存与SSRF白名单) 2026-10-22 20:59:32 +08:00
ypsdf1 9dcf5dcb93 第45批:修复账号安全卡报缺少web_token参数(apiPost统一注入web_token)+游客模式提示先登录 2026-10-22 19:18:18 +08:00
ypsdf1 71b644182c 第44批:玩家端账号安全双层验证(改密/2FA绑定解绑/恢复代码)+admin用户搜索卡住根因修复+sync改密列名修复 2026-10-22 18:55:26 +08:00
ypsdf1 d4748c4e62 3.11内测版:在线曲线采集上收core全站唯一入口+领地管理分页
- core.php 新增 onlineCurveEnsureSnapshot:心跳判据(>120秒记0防停服假曲线)、60秒节流、保留7天、source列迁移
- sync.php 三挂点(sync_online_players/online_heartbeat/对账兜底)自动留样本,不再依赖有人开页面
- online_curve.php 三本地函数改薄壳+max字段改真实最大值+文案改Java同步自动采集语义
- admin.php 领地列表/权限商店分页渲染:每页10/20/30预制+自定义不封顶+localStorage记忆;曲线文案同步
2026-10-22 16:43:00 +08:00
ypsdf1 f62a446d03 第33批:修安全拦截三函数路由错侧——删sqlite_master探测改直查目标表
playerWebBanReason/playerWebBlacklistReason/isIpBlacklisted 原先用
sqlite_master 存在性探测句抽表名(dbExtractTables只抽到sqlite_master)
→ 被dbPickSide判为非Java表 → 在caoyuanphp查information_schema →
目标表实际在caoyuanjava → prepare失败恒放行 = 拉黑玩家仍可进后台。
对齐sync.php第16批getBanBoard先例:SQL自带表名直接路由正确侧,
prepare失败按放行处理(fail-open不锁死正常玩家)。
2026-10-21 17:08:34 +08:00
ypsdf1 bca9b9af47 第32批:后台识别拉黑信号——sync_blacklist落表、validateWebAccess拉黑拦截、CDK兑换与前端拉黑提示 2026-10-21 15:10:47 +08:00
ypsdf1 bcc22df797 第29批:封禁对账bans配置cols携带created_time(map→created)供Java收回时回填BanEntry创建时间;hashcols不动防指纹恒changed 2026-10-17 13:37:47 +08:00
youpaishidifu 82c688c631 二次更新readme.md 2026-10-16 03:53:25 +00:00
youpaishidifu 831b2b53d7 更新 readme.md 2026-10-16 03:52:35 +00:00
ypsdf1 8337f06cda 恢复误推的readme.md内容 2026-10-15 14:19:06 +08:00
ypsdf1 ac1b0c86fd 第十九批:封禁公示按播报起点过滤(web_player_bans补created_time列并随推送入库、web_ban_board_cfg存ban_cutoff、查询加created_time>=起点) + 登录页人机验证组件300px按容器宽等比缩放对齐防溢出 2026-10-15 14:08:49 +08:00
ypsdf1 76c08ec0f2 同步一份最新的readme.md 2026-10-15 12:03:08 +08:00
ypsdf1 a2171262e6 第十七批:个人中心封禁公示卡片挪到详细信息板块下面 2026-10-14 20:34:53 +08:00
ypsdf1 79280c3990 封禁公示到期时间秒/毫秒归一:Java推毫秒,接口与前端统一按秒 2026-10-14 19:22:32 +08:00
ypsdf1 af6fb3b67e 封禁公示接口加固:路由侧无表时显式换侧兜底,区分0条与表缺失 2026-10-14 19:08:49 +08:00
ypsdf1 b99412cc8a 第十六批缺陷修复:封禁公示改查java侧表+卡片入内容区自适应高度+后台AGPL页脚 2026-10-14 18:58:05 +08:00
ypsdf1 e12a972ad7 第十六批:玩家端封禁公示卡片+AGPL合规页脚与开源地址.txt+封禁synced_at保序 2026-10-14 18:08:43 +08:00
ypsdf1 489b83f29d land_api输出缓冲加固防HTML污染;admin前端apiCall容错HTML响应 2026-10-12 00:23:11 +08:00
ypsdf1 8a669b1e24 用户组新增二手交易上架数量限制与保底价格字段
- land_api.php 六处 web_user_groups 建表加 shop_max_listings/shop_min_price 列
- 三处 migrations 加 ALTER,handleUpdateUserGroup INSERT/bind 带两字段
- sync.php 建表/迁移/INSERT 同步两字段(配合Java推送)
- admin.php 用户组新建/编辑表单与提交、列表详情显示两字段(-1=跟随全局)
2026-10-11 21:24:25 +08:00
ypsdf1 fcc8f08ef7 push_shop_stock 返回回执单:回显 push_id/内容指纹fp/条数,供 Java 核验 PHP 确实收到 2026-10-11 10:37:26 +08:00
ypsdf1 ed55de014b 修复护栏体检方法名错误:SdfMySqlResult只有fetchArray没有fetch_assoc,MySQL模式下体检必抛异常被fail-open吞掉导致护栏静默失效 2026-10-10 22:35:26 +08:00
ypsdf1 b0e572d7ac 库存双向同步(分叉以Java为主):新增push_shop_stock接收插件本地库存改动,web购买补写last_modified支撑竞态护栏;数据安全护栏(盘上状态文件三态判定:清空自愈补推/指错库拒绝握手/登录页告警横幅)与MySQL表结构快照入库 2026-10-10 21:52:59 +08:00
ypsdf1 a758bde564 修复 dbSplit 切分三连环缺陷:索引名禁库前缀、并发文件锁、孤儿库自动重切
- 索引正则改为只给索引名加 jd. 前缀(SQLite 的 CREATE INDEX 不接受 ON jd.tbl,
  旧写法 12 个索引全部 near ".": syntax error)
- 用 flock(LOCK_EX|LOCK_NB) 替代 static $done/$running,多 FPM worker 不再互删 Java.db.new
- 完成标记 Java.db.splitdone:只有表数校验通过 + rename 成功才写;
  存在但无标记的孤儿库自动备份为 .orphan.<ts> 后重切
- 切分不完整(有 err 或表数不足)时作废 .new,绝不产出缺表的 Java.db
- 新增 SDF_SPLIT_FALLBACK_WEB:切分未完成期间 java 侧共用 web.db,
  避免 dbOpen 提前建出空 Java.db 导致存量数据不可见
- MySQL 模式直接跳过 SQLite 切分(否则 11MB web.db 白切 18 秒)
2026-10-10 14:50:06 +08:00
ypsdf1 4bdefdab8c 修复 MySQL 方言层三处缺陷(test12 #1064/#1170/#1071)
1. sqlMySqlQuoteKeyCol 正则漏排 duplicate:section 4 已把 ON CONFLICT(key)
   DO UPDATE 翻成 ON DUPLICATE KEY UPDATE,这里又把其中 KEY 反引号 →
   ON DUPLICATE `key` UPDATE → #1064(线上 6 条,sync_config 写 web_area_config 必炸)

2. sqlMySqlRenderValue 的 FLOAT 分支 rtrim 吃掉有效数位:%.17G 对整数值
   不产生小数点,0.0→"0"、10.0→"10"、100.0→"100",rtrim('0') 会吃成
   ""/1/1 → 空槽位 #1064(线上 15 条,syncLands 的 warp 坐标行),
   且 10.0→1 属静默篡改坐标,比报错更危险。改为仅在有小数点且非指数时去尾零。

3. sqlMySqlColumnPart 用 ^KEY\b 一票判定表级约束:web_area_config 的
   `key TEXT PRIMARY KEY` 以 key 开头被误判 → 整列跳过 TEXT→VARCHAR 转换
   → #1170(线上 137 条,建表失败连带 #1146)。改为 KEY/INDEX 须后接 (列清单) 才算表级。

4. applyIndexPrefix 只给 TEXT/BLOB 加索引前缀,但 SQLite 的 TEXT DEFAULT ''
   在 MySQL 侧翻成 VARCHAR(500),utf8mb4 下 web_item_sn(owner,item_type)
   两列 4000 字节 > InnoDB 3072 上限 → #1071(线上 9459 条,联合索引始终
   建不出来,查询退化全表扫描)。改为按 information_schema 的字符集×实际长度
   估算索引字节预算:装得下保留全列索引,装不下或撞 TEXT 族才均分加前缀。

验证:_verify_1064_fix.php 27/27、_verify_init_tables.php 本地全量 initTables
零错误、_test_mysql.php 63/63;已部署 test12。
2026-10-10 12:45:37 +08:00
ypsdf1 4be4f1f107 修复第四关「未知操作」:稍后再配按钮改原生提交,form.submit() 不带 act 导致落 default 2026-10-10 11:05:28 +08:00
ypsdf1 2cb48de453 安装锁改为文件+数据库双份:库内 _install_lock 四态门禁
- 文件锁在+库在 → 404;文件锁在+库明确丢失 → 数据丢失警告页(可确认重装)
- 文件锁没了+库内锁在 → 自动补写 install.lock 再 404;两者皆无 → 全新首跑
- 探测失败(MySQL 连不上/配置读不出)一律按「库在」从严
- n4 落盘时同步写库内 _install_lock;老站迁移幂等补写
- 扫库/清库 SQL 排除 _install_lock 标记表,避免误判非空
2026-10-10 00:16:18 +08:00
ypsdf1 6f13740cce 修复 MySQL 扫库 Unknown column:information_schema 库名补单引号
real_escape_string 只转义不加引号,裸拼 WHERE TABLE_SCHEMA = 库名会被 MySQL 当列名。
2026-10-09 23:16:14 +08:00
ypsdf1 1e60d31ffd 重构安装页为四步向导:扩展检测/数据库刹车/SMTP强校验/安全配置
- 第一关扩展检测:sqlite3/mysqli 缺失时第二关锁死对应模式(前端 disabled + instValidate 兜底)
- 第二关数据库:mysql 地址端口预填 127.0.0.1/3306;扫库非空立即刹车,列清单后手输「确认清空」二次确认,取消则退回重填
- 第三关 SMTP:四项要么全空要么全不空,全不空必须发送验证码且比对通过才放行
- 第四关安全配置:IP 白名单必填(可自动填充当前 IP),验证码留空即关闭,2FA 跳转 admin_2fa_setup.php
- 统一写盘:最后一关才落 config.php/sql.md/captcha_keys.php,写完生成 install.lock 并自删
2026-10-09 21:36:53 +08:00
ypsdf1 0b63a99719 install页去掉IP白名单门禁并修null告警, 新增0.0.0.0应急逃生通道
- install.php: sqlMdDbConfig 全新站 java/web 槽为 null, $val 闭包加 is_array 兜底,
  消除每个输入框的 array offset on null 告警; 门禁只留令牌层(全新站无白名单可言);
  安装成功页改为回显本次写入的完整配置供截图手抄, 背景自删
- admin_2fa_setup.php: 引导页白名单框上方显示当前访问IP; 应急模式免密进 boot 模式
  并挂红徽标; secInstallPending 让位改为 !secIsEmergency(), 避免与全局应急路由
  形成 install/引导页互跳死循环
- security.php: 新增 secIsEmergency() 判定白名单含 0.0.0.0; secIpAllowed 放行该条目;
  新增 secEmergencyGate() 在限流层前把非引导页/非本机请求 302 锁回引导页(用302防浏览器缓存)
- config.php: 补 0.0.0.0 应急用法与用完必删的说明注释
2026-10-09 19:56:34 +08:00
ypsdf1 fc8c82b188 修复全新部署首跑顺序:装库先于2FA引导;install表单补令牌透传
- security.php 新增 secInstallPending():install.php 在场且无 install.lock = 装库未完成
- 引导模式下所有入口先 302 到 install.php,装完自删后才轮到 admin_2fa_setup.php
- admin_login/admin_2fa_setup 兜住本机直连与已引导未装库两种入口(secTokenUrl 带令牌)
- install.php 表单隐藏 token 字段,已引导站点 POST 也能过第三层门禁
2026-10-09 18:56:46 +08:00
ypsdf1 e1010927e5 PHP MySQL 适配层与双库切分收尾, 新增自毁式 install.php 配置安装页
- core.php: sqlDialectMySql 方言翻译 + SdfMySqlDb/Stmt/Result 复刻 SQLite3 API, SdfDbRouter 路由与侧别过滤器, 软依赖兜底; 修复 dbExtractTables 把 CREATE INDEX 索引名当表名导致 web 库 0 张表的真 bug
- security.php: sqlMdDbConfig/sqlDbDir/sqlDbFile 双库配置函数, web.db 给 PHP / Java.db 给 Java
- api/minecraft_auth.php, api/poller_online.php: Java 专属表改走 sqlDbFile('java')
- install.php: 自毁式数据库配置页, 只依赖 security.php, 哨兵块替换 + 备份原子写回读校验 + install.lock + unlink 自删, 门禁 404
- .gitignore: 屏蔽 .workbuddy/ 工作目录
- 测试: db 回归 26/26, MySQL 63/63, schema 对拍 11/11, install 端到端 32/32 全绿
2026-10-09 18:16:56 +08:00
ypsdf1 8a6755e725 新功能的预热 2026-10-09 17:11:20 +08:00
ypsdf1 ebcdeb6f09 添加 AGPL-3.0 开源协议:LICENSE 为 gnu.org 官方原文,readme 补充协议说明与网络服务开源义务 2026-10-09 11:30:55 +08:00