Commit Graph
72 Commits
Author SHA1 Message Date
youpaishidifu 24264cf320 加固-06(P0-05): 密码全部以 bcrypt 哈希入库,旧格式(明文/MD5)兼容并惰性迁移
背景:sq_user/sq_agent 密码明文入库、sq_admin 存 MD5;订单表 sq_trade.pass 明文在途;
找回密码 API 会把明文密码直接发邮件;日志记录明文密码。数据库泄露 = 全部账号密码泄露。

1. function/function_core.php 新增 3 个 helper(updateset 之后):
   - wq_is_hashed_password($v):判断存储值是否为新 bcrypt 哈希(60 长度 $2y$ 前缀)
   - wq_hash_password($plain):password_hash(PASSWORD_BCRYPT)
   - wq_verify_password($plain,$stored,$legacy):兼容 新 bcrypt / 旧明文(sq_user/sq_agent) / 旧 md5(sq_admin),
     哈希比对一律 hash_equals,恒定时间比较防时序侧信道

2. 所有落库点改为 bcrypt:
   - 用户开户漏斗 function/function_auth.php auth_add 入口幂等补哈希(上游已哈希则原样保留)
   - 代理开通漏斗 function/trade.inc.php type=4 代理落库前幂等补哈希
   - 下单点订单密码哈希入库:ajax.php(320/388/781)、agent/ajax.php(439) —— 订单表不再有明文在途密码
   - admin/ajax.php:addagent、addadmin、changeagent(mod=password)、changepassword 新密码
   - agent/ajax.php:开下级代理、changeuser(mod=password)、changeagent(mod=password)、changepassword 新密码
   - api.php:ChangePassword 写库
   - api/Communication.php 与 function/communication.php:用户登录校验成功后,旧明文惰性升级为 bcrypt

3. 所有校验点改为取行 + PHP 校验(不再 WHERE password=明文):
   - admin 登录(旧 MD5 兼容,成功即写回 bcrypt,session 与 DB 存同一新哈希保住 re-check 机制)
   - agent 密码登录(旧明文兼容,惰性迁移);agent token 登录 session 改存 DB 存储值
   - 根 ajax.php 续费 kt 密码校验(379/773)、卡密找回密码(1002)
   - api.php GetUserInfo 内联校验、getuserinfo() 校验(均带惰性迁移)

4. 找回密码改造(api.php RetrievePassword):
   密码已不可逆,原"邮件下发原密码"改为"重置为一次性随机新密码(bin2hex(random_bytes(6)))+ 哈希落库 + 仅邮件投递一次"

5. 日志/回传去明文:
   - admin 登录失败日志不再记录明文密码(改记账号)
   - admin getagentinfo 不再回传密码值(掩码 ********,经确认 UI 无回写风险)

6. 表结构:sq_admin.password varchar(33) -> varchar(255)(bcrypt 60 字符装不下)
   - wenquan_auth.sql 同步更新(新装库直接可用)
   - 已有库需执行:ALTER TABLE sq_admin MODIFY password varchar(255) NOT NULL;(本次本地库已执行)

回归(40 项全 PASS,8082 内置服务器 + 8081 nginx 双通道冒烟):
- API(c=api) 旧明文用户登录成功即升级 bcrypt;再登录幂等不错哈希;错密码 -205 被拒
- admin 旧 MD5 登录即迁移 bcrypt;再登录/错密码/日志无明文/checklogin 会话重校验均通过
- admin 新增管理员、改密(旧密码失效/新密码生效/恢复基线)
- admin 新增代理直接 bcrypt;getagentinfo 掩码;changeagent 改密哈希入库
- 旧明文代理登录即迁移 bcrypt;checklogin 通过;代理改密旧失效新生效
- admin 手工开通(funnel)明文 POST 直接存 bcrypt;API 登录新开通用户成功
- 注:测试应用 free 必须为 0(free=1 时 Login 入口直接放行,属产品设计,不走密码校验)

已知行为变化(记录):用户/代理列表按"密码"关键词搜索不再命中(存储已哈希,搜索本身即泄露向量,收紧);
列表中密码列显示 60 位哈希串而非明文;改密会使该账号现有会话失效需重新登录(与旧行为一致)。

api.php 为 2024 树中的旧入口(已被 api/Communication.php 取代),仍按同口径同步修了 4 处密码点防复活踩坑。
2026-10-10 12:25:52 +08:00
youpaishidifu 7d4ed3e7cd 加固-05(P0-04): api GetAppInfo 不再明文下发 connectkey/decryptkey
api/Communication.php 的 GetAppInfo 模块原实现把 sq_apps 全行
(含 connectkey/decryptkey 明文)返回给 SDK。这两个密钥是服务端与
SDK 通信的签名/解密密钥(第21行 new communication($appinfo['connectkey'],
$appinfo['decryptkey'])),任何持有合法 token 的调用方或其抓包者拿到
明文密钥后,可伪造该应用的任意 API 请求/解密响应。

修复:GetAppInfo 响应中 connectkey/decryptkey 掩码为 8 个 *,
其余字段(appname/ver/free/notice/upurl 等 SDK 所需配置)正常下发。

验证(c=api 全链路): 构造测试应用(known keys) → Initialization 取 token
→ GetAppInfo:connectkey/decryptkey 均为 "********",appname/free 等
字段正常,响应全文不含真实密钥明文。php -l 通过。
2026-10-10 11:38:57 +08:00
youpaishidifu 347af5537a 加固-04(P0-03): api/monitor.php 监控脚本鉴权 + 修复补单逻辑
- 增加鉴权:监控调用须带 ?key=monitor_key;密钥首次调用时自动生成
  (64hex,持久化到 sq_config setname='monitor_key',setname.inc.php
  增加种子行),hash_equals 校验,不匹配返回 403。杜绝匿名触发
  补单/清库。key 可通过 SELECT setvalue FROM sq_config WHERE
  setname='monitor_key' 获取,配置到 cron/监控服务。
- 修复 if(!!$result = select_limit_row(...) && count(...) > 0)
  运算符优先级断逻辑:拆为先取值再判断。
- 修复未定义变量 $tradeno(原 update 条件引用了从未赋值的 $tradeno)。
- trade_do 补单改为仅在状态 2->3 翻转成功(影响行数>0)时执行;
  影响行=0(已被先行进程完成)则跳过,防并发/重复补单。
- 修复 sq_apps 空表时 !array() 为真 导致误报"获取应用信息发生错误"
  (改为 false === 判断)。
- 结尾输出 JSON 结果(log/error),便于监控服务核对。

验证: 无key/错key 均 403;正确key 200;构造 status=2 测试订单,
首跑补单(agent 余额 100->110,trade 2->3),二跑无重复补单。
php -l 通过。
2026-10-10 11:32:56 +08:00
youpaishidifu c60e4ebc9b 加固-03(P0-02): 删除远程在线更新链(供应链 RCE 向量)
- admin/ajax.php: checkupdate / downloadupdatepacks / unzippacks 三个
  端点合并为统一禁用存根(返回 JSON "远程更新已禁用(安全加固)");
  原逻辑从作者第三方域 (download.wenquan6.cn / download.bwenquan.com)
  下载 zip 并解压到 Web 目录、再引导浏览器访问 install.php,
  攻击者控制该域即可向所有部署实例推送恶意代码(供应链 RCE)。
- 删除辅助函数 get_zip_originalsize() 与 getFile()(仅更新链使用)。
- admin/html/welcome.html 与 admin/welcome.html: 移除"检查系统更新"
  按钮及 function update() 整段 AJAX 链,替换为静态说明文案。
- admin/ajax.php: HTTP_USER_AGENT 比较改用 ?? 回退,消除无 UAgent
  客户端触发的 Notice(UAgent 会话锁定行为保持不变)。

验证: php -l 通过;登录态调用三端点均返回禁用 JSON;
UAgent 锁定对无 UAgent 客户端正确拒绝(code:-3)。
2026-10-10 11:21:25 +08:00
youpaishidifu 6669f4bc9c 加固-01/02: CWD 无关 include 改造 + UEditor 全入口鉴权 (P0-01)
A. 相对路径 include/require 全量改写为 __DIR__ 基址
   - 修复 nginx+fastcgi 下 php-cgi 继承启动目录 CWD (D:\phpstudy_pro\COM)
     导致 require '../function/...' 相对路径 include 全部失效;
     28 文件 101 处统一改为 __DIR__ 绝对基址,任意 Web 服务器行为一致。
   - 补齐带括号/缺斜杠漏改的 13 处 (controller.php、epay lib、
     payment.php、notify_url.php、return_url.php)。
   - function/config.inc.php 增加 config.local.inc.php 本地覆盖机制
     (该文件加入 .gitignore 不入库),仓库默认配置保持中立。

B. UEditor 后台入口安全加固 (P0-01)
   - admin/php/controller.php 全部 action 前置管理员会话校验
     (admin_username + admin_password),匿名无法上传/抓取/列目录/读配置。
   - 禁用远程图片抓取 catchimage (SSRF 向量),删除 action_crawler.php。
   - 上传/列表白名单剔除 .exe/.dll/.iso/.cab/.swf。
   - Uploader: 移除 iconv('unicode') Windows 告警行;
     getFileInfo/action_list 的 URL 拼接增加 REQUEST_SCHEME 回退。

验证: 匿名访问全部 action 返回未授权;登录态上传成功且 URL 正确;
catchimage 已禁用;JSON 合法;全量 php -l 0 错误;
nginx(8081) 与内置服务器(8082) 双通道回归通过。
2026-10-10 11:10:29 +08:00
温泉 e4a7137206 Create LICENSE 2024-08-09 14:22:16 +08:00
温泉 b8a0224e93 Update ver.inc.php 2024-08-09 14:18:39 +08:00
温泉 64fe1116be Update welcome.html 2024-08-09 14:16:51 +08:00
温泉 63a4a687f9 Update README.md 2024-08-09 14:13:52 +08:00
温泉 ef9b972af5 Update ver.inc.php
Update Version To 12.12
2024-07-30 16:45:28 +08:00
温泉 ea751a3cf9 Merge pull request #18 from xiaodaii/main
修复BUG
2024-07-18 10:14:07 +08:00
xiaodaii 299b91c8f9 卡密余额充值会创建两个账户 2022-08-06 18:22:35 +08:00
xiaodaii 1b8cb6a3d9 Merge branch 'main' of https://github.com/xiaodaii/QuanAuth 2022-02-28 17:52:40 +08:00
温泉 8e2c9acb05 Update README.md 2021-11-04 11:05:22 +08:00
温泉 a3cf14ac31 Merge pull request #16 from DongHan-2002/patch-1
Merge#修复管理员后台无法删除已使用卡密的BUG
2021-11-03 20:01:58 +08:00
星梦 1b5be6e041 Update ajax.php
修复管理员后台无法删除已使用卡密的BUG
2021-11-03 18:23:53 +08:00
温泉 4ac3576071 Update ver.inc.php 2021-08-21 11:34:44 +08:00
温泉 7d0a2cc9b6 Merge pull request #15 from xiaodaii/main
Merge
2021-08-05 21:39:26 +08:00
小槑 321e15a38b Update login.html 2021-08-05 21:10:42 +08:00
xiaodaii f1cea4c472 登录失败 2021-08-05 20:57:44 +08:00
xiaodaii ae507d7be7 修已登录IP错误 2021-07-31 01:39:38 +08:00
温泉 9d9b5b6e92 Merge pull request #14 from xiaodaii/main
在线开通显示卡密不存在,续上次未考虑问题
2021-07-26 12:43:32 +08:00
xiaodaii acc6e1f88d 在线开通显示卡密不存在,续上次未考虑问题 2021-07-26 12:35:01 +08:00
温泉 f96df13293 Merge pull request #13 from xiaodaii/main
修复vaptcha验证
2021-07-20 14:54:18 +08:00
xiaodaii fc667b7f31 修复vaptcha验证 2021-07-20 13:43:34 +08:00
温泉 5a0d384c18 Merge pull request #5 from 1819158965/patch-1
Update tckm.html
2021-07-14 17:16:59 +08:00
温泉 ecbaf56dd2 Merge pull request #6 from xiaodaii/xiaodai
小呆的修复合并
2021-07-14 17:15:33 +08:00
xiaodaii d3042dbfb7 等级无设置所属应用post提交可以强行开通 2021-07-14 02:01:23 +08:00
xiaodaii 5d3c77cff2 开通套餐卡密不按折扣扣款 2021-07-14 02:00:15 +08:00
xiaodaii 50e5b6536d 增加写入代理QQ编辑框 2021-07-14 01:57:53 +08:00
1819158965 a2af965b3c Update tckm.html
修复清空已使用卡密按钮的正确参数,修复状态开关的错误,美化信息框
2021-07-13 20:43:40 +08:00
xiaodaii ba8119020a 测试 2021-07-02 14:27:25 +08:00
小槑 04d9ae83c7 Update ajax.php 2021-07-02 14:06:51 +08:00
温泉 4d70134078 Merge pull request #1 from xiaodaii/main
修正部分错误
2021-06-23 22:55:55 +08:00
xiaodaii 8ab40ab9a4 开通ID显示错误 2021-06-23 22:37:48 +08:00
xiaodaii 656eac7472 开通id显示错误 2021-06-23 22:29:21 +08:00
温泉 779fa38fda 修复后台首页跳转问题 2021-05-12 01:19:48 -05:00
温泉 d0a1ab05ea Update README.md 2021-02-16 22:00:11 +08:00
温泉 877fc29d00 修复token登录报错的bug 2021-01-28 00:13:45 +08:00
温泉 714fae48ef 修复token登录后台无效的bug 2021-01-28 00:12:15 +08:00
温泉 9d597f006d 修复查询永久授权换行问题 2021-01-23 21:02:27 +08:00
温泉 cc7f47c359 修复Token密钥登录 2021-01-18 09:18:41 +08:00
温泉 552c0d122a 修复支付结果页面跳转bug 2021-01-13 01:03:29 +08:00
温泉 d467fd05dd 更新 ajax.php 2021-01-13 00:42:54 +08:00
unknown 1ebd8d374e 修复人机验证的VID被固定问题 2020-09-09 18:03:52 +08:00
unknown 3d37c6d94f 修复一处CSS的BUG 2020-09-09 18:03:29 +08:00
unknown 9495b56d1d 修复检查绑定开通时候没验证应用的BUG 2020-09-09 17:55:36 +08:00
wenquan 6b216086a3 将邮件发送方式改为本地邮件发送 2020-09-06 13:46:57 +08:00
wenquan 7fcb73c8c9 修复BUG 2020-09-06 13:26:03 +08:00
wenquan b03b23f1e2 修复换绑返回信息解析错误BUG 2020-09-06 13:18:54 +08:00