升级日志 v1.4.9

发布日期:2026-08-09 · 浦沱鑫进货联动管理系统(缺陷修复版:结算「网络异常」误报、数据安全护栏)
本次为紧急修复版本,不含新功能。重点解决用户反馈的「结算明明成功、却提示结算失败:网络异常」问题, 并补上若干可能造成数据丢失或越权读取的隐患。公司间核算重构、分户记账等大改动排在 v2.0.0。

缺陷 1结算成功却提示「结算失败:网络异常」

现象:点确认收货 / 结算后,数据库其实已经写入成功,页面却弹出「结算失败:网络异常」,用户以为失败又点一次,造成重复操作和对账困惑。

根因:这是两条独立的路径叠加造成的假故障。

修复:

缺陷 2loadData 函数根本不存在

缺陷 3弹窗调用方式不一致导致部分弹窗打不开

缺陷 4清空数据后新批次号与历史结算单撞号

安全 1读接口补令牌校验

说明:本次只做「挡住匿名访问」这一层。当前令牌是全站共享的静态串,账号密码哈希仍随 load 下发(登录逻辑依赖它)。 真正的会话鉴权 + 按公司下发数据 + 凭据轮换安排在下一阶段,届时会一并改造登录流程。

安全 2台账写入防误清空

缺陷 5确认收货时填的拆分数量被静默丢弃

安全 3测试脚本不再隐式打生产

排查中发现部分「测试脚本」实际会直接写生产库、删生产数据,且无任何确认。已全部加护栏:

脚本原风险现在的护栏
dbhelper.pypattern 为空时 LIKE '%%' 匹配全表,clean 等同删光结算数据 空 pattern 直接拒绝;clean 只允许测试前缀(SETTEST / SPLITTEST / E2E 等);越权删除须加 --i-know-this-is-prod 并输入 DELETE 确认;拒绝含引号分号的 pattern
test_ptx_split.js硬编码生产地址,直接建单 + 调用 dbhelper 删库 必须显式传 TEST_BASE_URL;指向生产还须 TEST_ALLOW_PROD=1
e2e_settle.py默认在生产创建真实结算单并跨系统流转 生产运行须 TEST_ALLOW_PROD=1,可用 PTX_BT_API / PTX_SP_API 切测试环境
cleanup_e2e.pyPREFIX 若被改空则删除全部结算单 启动断言 PREFIX 非空且不含引号 / 通配符

顺带修掉 dbhelper.py 一个老问题:无匹配数据时 MySQL 的 SUM() 返回 NULL,旧代码在 float('NULL') 处崩溃。

安全 4网站目录里的备份文件可被任何人下载

上线后做目录巡检时发现,站点根目录残留的几个文件能被公网直接下载,且里面是明文凭据。 这比本次修的其它问题都严重,已当场封堵。

可下载的文件泄露内容
api.php.bak.20260807125157
api.php.bak.20260807125325
后端完整源码,含数据库密码明文回退值、SYNC_TOKEN、API_TOKEN
__saas/data/control.sqlite SaaS 控制库:saas_keys 28 条(其中 9 条未吊销,含 api_key + api_secret)、 saas_admins 管理员口令哈希、saas_tenants 9 家租户的库名与库用户
进货联动管理系统.html 8 月 7 日的旧版前端源码(内容与线上 app.html 同级,无额外机密,但属过期代码)

处置:

仍需业务方决策:凭证轮换。这些密钥已在公网暴露过,虽已封堵,但无法确认此前是否被下载。 建议轮换:数据库密码、SYNC_TOKEN、9 条未吊销的租户 api_secret、SaaS 管理员口令。 轮换会影响正在对接的系统,需要协调停机窗口,暂未执行,等确认。
另需说明:API_TOKEN 本身就写在前端页面里(app.html 明文常量), 任何打开页面的人都能拿到。本次给读接口加的令牌校验只能挡住不看源码的自动扫描, 挡不住有心之人。真正的解法是 v2.0.0 计划里的会话鉴权(登录换取有时效的令牌),届时一并处理。

测试与验证

下一步:v2.0.0 大版本

待确认事项:历史批次 N7~N9 的上下游链路关系存在歧义,B2 拆表迁移前需要业务侧确认,否则迁移后链路会对不上。
← 返回版本总览