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
2026-10-01 15:12:35 +00:00
2026-10-07 20:46:35 +08:00
2026-10-16 03:53:25 +00:00
2026-10-09 17:11:20 +08:00

Sdf1_login Web 端(PHP 后端)

开源协议

本项目(Sdf1_login 的 PHP Web 后端,配套 Java 插件一同授权)采用 GNU Affero General Public License v3.0(AGPL-3.0),协议全文见 LICENSE。

  • 你可以自由使用、修改、分发本项目。
  • 本项目本身就是网络服务,若你部署为对外网站/服务,必须向使用者提供完整的对应源代码(AGPL 第 13 条)。
  • 衍生作品必须同样以 AGPL-3.0 授权分发。
  • 本项目按「原样」提供,不附带任何担保。

部署者须知:请把根目录的 开源地址.txt 里的地址改成你自己的后端源码仓库地址(第一行非 # 注释的 http/https 地址即生效)。玩家端页脚会自动读取并展示该地址,用于满足 AGPL 对网络服务提供源码获取途径的要求;出厂默认指向 https://git.ypshidifu.cn/youpaishidifu/Sdf1_login/src/branch/php/。

本目录是 Minecraft PaperMC 插件 Sdf1_login(即本仓库的 ../Sdf1_login)配套的 PHP Web 后端。 两个工程是一对:Java 插件负责游戏内逻辑(登录注册、债券经济、商城、领地、工单、PVP…), 本目录负责 Web 侧的界面与数据(玩家面板、管理后台、收银台、在线充值、正版登录)。

1. 两个工程的关系(一图流)

游戏内(Java 插件 Sdf1_login)                    Web 侧(本目录)
─────────────────────────────                  ───────────────────────────
/reg /login /cypay /shop /web /mslogin    ◄──►  login.php / player.php  玩家面板
/sdf1_login 管理面板                          ◄──►  admin.php           管理后台(19 模块)
商城/CDK/债券流水 权威数据在 Java              ◄──►  cashier.php         独立收银台
                                                     api/pay.php         彩虹易支付在线充值
                                                     
数据通道:① Java 调 PHP 的 api/sync.php(HTTP,带 secretKey,60+ action 推/拉)
          ② 共享 SQLite 队列(web.db 里的 pending 表,Java 每 5 秒轮询消费)
          ③ 领地/用户组等变更走 web_admin_changes 队列双向同步
  • 对应文档:Java 端 ../Sdf1_login/README.md(使用手册)

2. 目录结构速览

路径 说明
config.php 全部配置入口:SECRET_KEY(必须与 Java 端一字不差)、管理员账号、SMTP、游戏库路径、人机验证厂商选择。仓库里是 REPLACE_ME_* 占位符,真实值只在服务器
core.php 公共引擎(约 80KB):SQLite 单例(WAL + 锁竞争调优)、建表/迁移、Token 双轨体系、管理员/收银员会话、SMTP、IP 风控黑名单入口拦截。几乎所有文件都 require 它
security.php 2026-09-29 入侵事件后的三层加固:TOTP 二次验证 + IP 白名单 + 后台访问令牌 + 会话纪元
页面层 login.php → player.php(玩家 SPA,242KB);admin_login.php → admin.php(管理 SPA,230KB,内嵌 cashier.js 收银模块);cashier.php 独立收银台;service.php 服务商面板;freeze.php / reset_password.php 邮件自助;active_players.php / online_curve.php / today_bonds.php 统计页(兼 JSON API);admin_2fa_setup.php 安全配置引导页
api/ 接口层,核心是 sync.php(Java↔PHP 唯一同步入口,60+ action);其余:admin.php 后台 API、shop.php 商城、cdk.php、pay.php + poller_online.php + pay_poller.php 支付与补单、minecraft_auth.php MS 正版 OAuth 代理、land_api.php 领地/用户组、ticket.php 工单、security_alert.php 异地登录回调、sn.php 物品 SN 防刷等
db/ web.db(约 40 张表,PHP 读写、Java 经接口读写,绝不直开文件)+ orders.db(纯 PHP 独占:pay_orders / cashier_orders / shop_configs / mc_auth_sessions / cashiers,拆独立库是为了消除 SQLite 文件锁竞争)
文档 pay.md(订单号格式配置)

3. 数据:三个 SQLite 库的分工

库 谁读写 内容
db/web.db PHP + Java(Java 经 api/sync.php 等 HTTP 接口,不直开文件) users、tokens、weblogin_*、shop_items、cdk、web_transactions、bond_cache、online_players、web_area_lands/permissions、web_user_groups、web_tickets、SN 系列、各 pending 队列
db/orders.db 纯 PHP 在线充值订单、收银台订单、充值档位配置、MS OAuth 会话、收银员账号
游戏侧 login.db / bond.db Java 独占 插件账号与债券账本。PHP 唯一例外:api/land_api.php 验证玩家时可直读 GAME_LOGIN_DB 兜底

4. 与 Java 插件的通信模型(重点)

  1. 没有 PHP → Java 的 HTTP 调用(config.php 里的 CALLBACK_PORT / GAME_SERVER_HOST 是历史死配置)。 方向只有 Java → PHP(sync.php 等),以及 PHP 写队列表、Java 轮询消费。
  2. 四条共享队列(都在 web.db):
    • web_transactions(pending):发货/加债券/CDK/充值到账 → Java pull_pending_transactions 拉取执行,confirmed_transactions 防重
    • sync_requests:"立即来拉"标记(购物/改价后触发 Java 快速同步)
    • web_admin_changes:PHP 侧领地删改/用户组变更 → Java 消费后回推最终状态(Java 是领地权威源)
    • web_login_requests / web_register_requests / cdk_validate_requests / pending_player_validations:密码由 Java 用 login.db 真实凭证校验,PHP 禁止自验
  3. 玩家 Web 登录链:游戏内 /web → Java 生成 weblogin_token 推给 PHP → 浏览器 login.php?token= → player.php; 无 token 时走密码 → 写 pending → Java 校验 → 前端轮询 check_web_login_result。
  4. 在线充值链:pay.php 建单(orders.db)→ 彩虹易支付网关 → notify 验签幂等 + CF WAF 拦截 notify 时的 poller_online.php 直扫平台 MySQL 补单双保险 → 写 pending 流水 → Java 轮询加债券到账。 多服共用一张 pay_order 表时靠 PAY_ORDER_PREFIX 隔离(生产 RE,测试改如 RT)。

5. 四套鉴权

角色 方式
玩家 游戏内 /web 签发的 weblogin_token;或账密(Java 异步校验);3 分钟同 IP 免密快速重连
管理员 PHP session + 密码,叠加 security.php 三层加固(TOTP / IP 白名单 / 后台访问令牌),被锁外时用 boot 令牌进 admin_2fa_setup.php 逃生
收银员 cashiers 表 bcrypt + 折扣上限 + 现金收款权限
服务商 游戏账号 + web_service_providers 授权表

6. 首次部署清单

  1. 改 config.php 占位符:SECRET_KEY(与 Java 端 插件设置 保持一致,否则同步接口全 401)、ADMIN_PASS、SMTP_*(不发邮件可留)、GAME_*_DB/DIR、PAY_ORDER_PREFIX。
  2. 首次访问 https://域名/plugin/admin_2fa_setup.php 保存任意一项 → 自动把缺失的 SEC_* / ADMIN_IP_WHITELIST / 2FA 密钥随机生成并写回 config.php 的 >>>SEC-UPDATE 区(写前自动备份 db/config_bak/),并转入强制模式。
  3. Java 侧:WebManager 的 webBaseUrl 指向本站;启用 web 通信后开始 5 秒轮询队列。
  4. 部署走 deploy_php_only.py(FTP)——脚本永远排除 config.php、pay_secrets.php、captcha_keys.php、lsky_keys.php、db/:这些文件仓库里是空模板/占位符,覆盖一次线上真值 = 同步 401 + 后台锁死 + 支付补单全挂(均有事故复盘注释)。
  5. 支付商户密钥(汇付/RSA/平台 MySQL/MS OAuth)在 api/pay_secrets.php(仓库为范文,真值手工上传服务器)与 密钥.md(仅本地存储,严禁入库)。

7. 安全注意(已知项)

  • api/diag_db_content.php 无鉴权可 dump 两库表结构与样例,正式站应删除或加门禁。
  • api/get_online_players.php 是损坏文件(依赖不存在的 ../inc/function.php)。
  • sync.php 里 web_login_requests 存的是明文密码(由 Java 消费校验)——web.db 文件泄露 ≈ 全服账号泄露,db/ 已 git-ignore。
  • 仓库版 config.php 严禁出现真实口令/密钥(2026-09-29 用户指令,历史事故复盘见文件头注释)。

S
Description
No description provided
Readme AGPL-3.0
22 MiB
v3.11
Latest
2026-10-26 12:15:19 +00:00
Languages
Java 100%