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 |
|