ypsdf1
|
a33aba1b13
|
第57批续12: 修复token有效期误判+绑邮箱弹窗邮箱字段缺失
- core.php: validateWebAccess view操作不再要求web_login_verified——
token 10分钟内有效即直接放行,在线玩家无需二次密码(之前逻辑要求
Java推送web_login_verified才放行,导致自动注册token延期即失效)
- api/account.php: acctBindEmailPoll SQL补email字段——前端
acctBindEmailCodeStep(d.email)拿不到邮箱,绑邮箱弹窗蒸发
|
2026-10-26 21:49:50 +08:00 |
|
ypsdf1
|
716d43b8c2
|
第56批:checkEmailSuffix移至core.php共享(register/account可直接调用)
|
2026-10-25 18:57:49 +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
|
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
|
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
|
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
|
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
|
ce489d1450
|
debug.log 保留策略:只留最近3天+≤5MB,任一超标即清理到两条件同时满足
|
2026-10-05 13:35:39 +08:00 |
|
ypsdf1
|
4160c60aa6
|
新增用户组药效等级上限配置,与Java端双向打通
配合 Java 端 6f92028(原版药效强度上限 256)。原版 /effect 的
amplifier 硬上限是 255,即药效强度 1~256,此前 Web 侧封顶写死
255 且各建表点口径不一,本次统一为 max_effect_level 配置项。
改动:
- web_user_groups 增加 max_effect_level 列(默认 256)
· sync.php / land_api.php / core.php 全部 8 处建表块补列
· 3 处迁移表补 ALTER 条目,老库自动升级
- api/sync.php syncUserGroups:Java 推送时接收并写入 max_effect_level,
<=0 或超过 256 一律归一到 256(原版硬上限不可突破)
- api/land_api.php 新增 getLandMaxEffectLevel():按领地所有者所属
最高优先级用户组取上限,无组则 256;handleUpdateLandField 写入
give_effects 时改用该上限 clamp(原先硬编码 255)
- api/land_api.php update_user_group 读写补该字段
- admin.php 用户组新建/编辑弹窗补「药效等级上限」输入框
(1~256,默认 256),并附原版范围说明;两处提交参数同步带上
规则:普通玩家(未加入任何用户组)固定按 256 封顶,严禁超限;
加入用户组后按组配置封顶,填 256 即不额外限制。
|
2026-10-04 19:26:05 +08:00 |
|
ypsdf1
|
419b677aa9
|
修复工单上传图片误判+用户组max_effects配置同步
|
2026-10-04 14:48:43 +08:00 |
|
ypsdf1
|
fe1ed613ba
|
工单管理支持上传图片(兰空图床转存)
- 新增 lsky.php:兰空图床 API 客户端,token 缓存+提前60秒续签+401自动重签重试
- 新增 lsky_keys.php:图床凭据模板(仓库仅占位符,真值只在服务器,永不上传)
- api/ticket.php:新增 upload_image 动作,限 png/jpg、单张≤2048K、内容与后缀必须一致、同会话每分钟限12次;web_tickets 增 images 列(JSON 数组,上限3张,URL 仅限自家图床)
- core.php:权威建表补 images 列 + 老库幂等 ALTER 迁移
- player/admin 两端:上传即暂存、光标处插入 [图片N] 滚动占位符、上限3张;提交时随工单入库
- player/admin/service 三端详情:占位符还原为 markdown 图片,未引用图片补在末尾
|
2026-10-04 10:16:37 +08:00 |
|
ypsdf1
|
5912c6fd76
|
引导初始化:管理密码首次由部署者自设,解开占位符密码无法保存配置的死结
|
2026-10-02 17:10:39 +08:00 |
|
ypsdf1
|
c46c9ebdfe
|
紧急加固三层:admin.php 入口令牌门禁 + 2FA 扫码绑定与精确诊断
第三层(新增,config.php 的 SEC_ACCESS_TOKEN):
- 只有 admin.php?token=<令牌> 才放行,缺/错令牌一律返回 nginx 原生 404
(与"文件真的不存在"逐字节一致,探测者无从判断),令牌检查置于白名单之前
- 登录接口在密码校验通过后才下发 token,2FA 通过与收银台跳转由服务端补拼
- 入口页加 Referrer-Policy: no-referrer,防令牌经外链 Referer 泄露
- 配置页展示后台唯一入口地址,支持一键重新生成令牌
第一层修复(2FA 验证码"无效"):
- secTotpVerify 容错窗口 ±30 秒扩到 ±90 秒
- 新增 secTotpDiagnose:失败时区分"密钥没对上"与"设备时钟偏移多少秒"并给出处置指引
- Base32 解码兼容空格/连字符与 0/1/8/9 手误,避免密钥被静默截短
- 验证页倒计时与服务器时间显示改用服务端时钟基准
- 密钥生成改幂等,"重新生成"二次确认,防止已扫码密钥被误作废
第二层(二维码):
- admin_2fa_setup.php 内联 qrcode-generator(MIT) 生成 otpauth 二维码,离线可用
- 后台侧边栏新增"安全配置"入口;admin_2fa_setup.php?boot= 在白名单 IP 下同样生效
已通过线上端到端验证 22 项 + 二维码 OpenCV 往返解码校验。
|
2026-09-29 22:55:46 +08:00 |
|
ypsdf1
|
fd03189f31
|
SN三条件门槛:报失/补办/注销统一前置校验与最小化提示(不透露未达标项),web_item_sn 新增 detached_at/own_chest,管理端详情展示逐条判定并拆分强制注销/代办注销
|
2026-09-29 20:22:20 +08:00 |
|
ypsdf1
|
045d9f60b8
|
SN接口:管理员命令带 is_force 强制标记(Java 侧仅本次绕过冷静期),注销前增加位置前置检查拒绝箱内/他人手上物品,命令回执按执行结果更新状态
|
2026-09-29 13:38:35 +08:00 |
|
ypsdf1
|
18bd1e9b19
|
feat: SN防伪后端 api/sn.php、8张SN数据表与玩家端/管理端SN页面
|
2026-09-29 11:16:32 +08:00 |
|
ypsdf1
|
4db131082c
|
fix: 永久封禁玩家禁止登录Web后台、正版验证粘贴页响应异常时回查真实状态
- core.php 新增 playerWebBanReason():查 web_player_bans 名字封禁(永久/未过期),expire_time 兼容Java推送的毫秒单位;validateWebAccess 接入,商城/CDK/余额/token校验一律拒绝
- api/sync.php 四个登录入口全部拦截:validate_weblogin_token、web_login_request、send_email_code、verify_email_code
- api/minecraft_auth.php:success/error 清空输出缓冲保证纯JSON;新增 action=status 会话真实状态查询;粘贴页提交响应异常时回查状态,已验证则如实提示通过,不再误报"服务器响应异常"
|
2026-09-28 00:03:07 +08:00 |
|
ypsdf1
|
f2b87325e1
|
feat: 封禁IP同步Web黑名单(须持游戏内/web token)、清空队列联动清理pending登录请求
|
2026-09-27 21:23:31 +08:00 |
|
ypsdf1
|
c266cf8555
|
R17: 修复token被误判为一次性 - 清理validateTokenSilent诊断日志+修复getDB重复ROLLBACK
|
2026-07-11 20:26:13 +08:00 |
|
ypsdf1
|
1238c6a20c
|
修复: core.php web_area_permissions 添加 UNIQUE(land_id,player_name) 约束
- 根因: core.php 创建表时缺少 UNIQUE 约束,导致 sync.php 的 ON CONFLICT 永远不触发,每次同步插入新行
- 新增迁移逻辑: 检测旧表缺少 UNIQUE 时自动重建表并迁移数据
|
2026-07-10 12:52:44 +08:00 |
|
ypsdf1
|
ae1ff5ffd8
|
异地登录检测/账号冻结解冻 + 公共邮件辅助函数
- core.php: 新增smtpSendEmail/queryLoginIpLocation/getBaseUrl/sendLocationAlertEmail
- security_alert.php: 接收Java通知比对IP归属并发送提醒邮件(含冻结/改密链接)
- freeze.php: 验证freeze_token冻结账号并写freeze指令
- sync.php: 冻结账号禁止Web登录; smtpSendEmail上移至core.php统一复用
- reset_password.php: 改密成功后解冻(清frozen+写unfreeze)
|
2026-07-09 17:09:35 +08:00 |
|
ypsdf1
|
1ea6f4963f
|
修复: web.db initTables中cashiers.can_cash冗余加列用@抑制挡不住SQLite3Exception,导致每条请求抛duplicate column并刷爆debug.log(33MB)写满磁盘阻断FTP上传——改为try/catch幂等兜底
|
2026-07-08 00:27:56 +08:00 |
|
ypsdf1
|
02dc706635
|
修复: orders.db冗余ALTER加列导致duplicate column name异常、getOrdersDB首调失败订单丢失——改为幂等兜底try/catch
|
2026-07-07 23:39:37 +08:00 |
|
ypsdf1
|
9c269cc184
|
重构: 收银台订单库彻底独立于web.db,根除订单加载卡死
根因:订单记录原写在 web.db,与 Java 经 sync.php 高频写入共享同一 SQLite 文件,
产生文件级锁竞争(database is locked)。原 62f5323 用 busy_timeout=15s + 重试 hack
缓解,但 Java 持续写入仍会顶住 PHP 订单读查询,导致订单页长期转圈。
改动:
- 新增独立 orders.db 常量(ORDERS_DB_PATH),Java 永不读写此库
- core.php 新增 getOrdersDB() 连接独立库(WAL + busy_timeout=5s),建表并幂等迁移 web.db 历史订单
- recordCashierOrder() 改写写入 orders.db,订单写失败仅记日志返回空单号,绝不阻断购买主流程
- shop.php 将订单记录移出 web.db 事务,放到 COMMIT 之后写独立库
- cashier.php cashierOrderList() 直接读 orders.db,去掉 busy_timeout 与 5 次重试兜底 hack
- web.db 内旧 cashier_orders 表保留为历史死表(仅作迁移源),不再被读写
效果:订单查询与 Java 写入完全解耦,订单页不再受 CF/Java 锁影响而卡死。
|
2026-07-07 15:25:25 +08:00 |
|
ypshidifu
|
6359830105
|
修复: orders.php的esc()未定义报错(core.php补齐PHP版esc) + 收银台底部保留5条最新订单(独立页orders.php仍展示全部)
|
2026-07-07 12:38:37 +08:00 |
|
ypsdf1
|
9456f787f8
|
优化: 收银台购物延迟压至15秒内(busy_timeout 60s→8s、移除热路径冗余DDL、合并配置批量读取)
|
2026-07-07 10:39:17 +08:00 |
|
ypsdf1
|
f32c7cfe86
|
收银台双模式收款与打包配置全链路实现
- 收银员新增 can_cash 现金收款权限字段(登录/列表/新增/编辑全链路)
- 购物车结算支持 pay_mode=cash/bond 双模式,现金模式跳过余额校验与扣债券
- 收银台前端读取可配置 packmoney 实时报价,修复此前硬编码+2元与实际收费不符
- 管理后台新增打包费(packmoney)与环保减免(green_discount)配置端口
- 同步接口新增 get/set_shop_config,Java端定时器拉取配置
- 购物小票书塞入首个潜影盒,免费潜影盒订正为原色(SHULKER_BOX)
|
2026-07-06 23:48:44 +08:00 |
|
ypsdf1
|
59701d1627
|
新增独立收银台页面与收银员账号体系:支持收银员/管理员登录、手动折扣(服务端强制上限)、订单记录;同步修复代购≥1000仍误报需玩家密码问题(#733 #734)
|
2026-07-06 19:27:14 +08:00 |
|
ypsdf1
|
dd425f4946
|
修复商城database is locked;购物车结算增强:≥1000元强制密码校验、潜影盒颜色可选收费(默认紫色免费);玩家端新增购物车模式与颜色选择器
|
2026-07-06 17:33:15 +08:00 |
|
ypsdf1
|
7a283ae4e0
|
商城购物车模式+收银台结算+后台折扣配置:前端购物车FAB/抽屉/结算弹窗,后端buy_cart接口事务批量购买,admin购物车配置卡片,cart_config/save_shop_config接口
|
2026-07-06 16:39:47 +08:00 |
|
ypsdf1
|
591d71ede0
|
fix: PHP数据库锁修复 + 用户组添加/移除错误处理
1. initTables()统一创建所有核心表(web_user_groups, web_user_group_members等)
2. handleAddGroupMember改用playerExists()本地验证替代异步validatePlayerViaJava()
3. handleRemoveGroupMember增加错误处理和affected行数检查
4. 移除validation_callback/visitor中的CREATE TABLE IF NOT EXISTS
|
2026-07-03 13:41:22 +08:00 |
|
ypsdf1
|
5f3bd70987
|
fix: SQLite只读数据库修复+远程权限修复API
- getDB(): 新增自动chmod修复数据库文件/WAL/SHM权限
- getDB(): initTables和migrateDatabase加try-catch容错,防止写入失败导致500
- 新增fixDbPermissions()远程修复API: 可修复目录/数据库/WAL文件权限+写入测试
- sync.php: 注册fix_db_permissions action
|
2026-06-28 10:45:33 +08:00 |
|
ypsdf1
|
967feb9b94
|
修复领地设置不同步:PHP端完整接收所有字段
问题1:handleSyncLands只存13个基础字段,30+权限字段全部丢弃
修复:INSERT扩展到63列,完整接收Java推送的所有deny_*、效果、传送点字段
问题2:web_area_lands表缺少权限列
修复:initLandTables添加46个ALTER TABLE迁移,兼容已有表
问题3:validateWebAccess检查窗口不匹配
修复:web_login_verified检查改用token实际有效期(非硬编码5分钟)
|
2026-06-27 13:37:29 +08:00 |
|
ypsdf1
|
57fbc1ffc1
|
fix: Web自动登录安全+领地同步
1. validateWebAccess的view操作增加web_login_verified检查(5分钟有效)
2. pushPlayerLoginStatus在online=1时同步写入web_login_verified
3. 防止偷token自动登录: 未通过Java验证的token要求密码
|
2026-06-26 19:18:40 +08:00 |
|
ypsdf1
|
8edc94b848
|
v12: PHP密码验证安全修复 + land_api GET参数支持
安全修复:
- sync.php: 删除verify_web_password端点,禁止PHP自验证密码
- core.php: validateWebAccess大额交易密码验证改为检查web_login_verified(Java验证结果)
- 密码验证强制走web_login_request流程
其他:
- land_api.php: handleAckAdminChanges支持GET参数ids(避免POST Content-Type问题)
|
2026-06-25 14:19:08 +08:00 |
|
ypsdf1
|
98f9cb6410
|
@
领地系统大重构:全局配置+数据入库+新权限+传送点+安全删除+容器扩展
- 全局配置改为area_config表(替代txt文件)
- area_lands扩展到61列,新增10个权限布尔+5个传送点坐标
- 新增投掷物/发光/红石/门禁/音频/拴绳/农作物/剪毛/投喂等权限
- /protect settp/tp传送点系统
- 删除1分钟延迟+二次确认
- 安全传送判定(空气+实体+边界3格)
- 容器权限覆盖所有UI类型
- .gitignore清理敏感文件
@
|
2026-06-23 16:51:30 +08:00 |
|
ypsdf1
|
4c7ec7490f
|
fix: 修复库存不同步bug(item_id字段名不匹配); 新增库存高频轮询; 新增工单系统; 修复admin_stock竞态条件; 修复opcache_reset竞态
|
2026-06-22 16:54:13 +08:00 |
|
ypsdf1
|
885e70f0f5
|
添加Web前端代码
|
2026-06-19 16:02:14 +08:00 |
|
ypsdf1
|
9bae160ce0
|
Java:新增ip推送端口,后端可以查看玩家ip及归属
php:新增ip属地、实时在线数据,可以查看玩家ip、归属和实时在线情况
|
2026-06-18 12:35:22 +08:00 |
|
ypsdf1
|
54cd3c4f59
|
feat: 初始提交 Web 管理后台源码 (PHP)
|
2026-06-14 16:35:07 +08:00 |
|