提交图

3 次代码提交

作者 SHA1 备注 提交日期
xcbyy
dd836b674e fix(security): 安全闸门与 NODE_ENV 解耦,支付/提现 fail-closed
- 新增 SECURE_MODE(仅 ALLOW_INSECURE_DEV_AUTH=1 时放开):后台登录口令、上传、内容检测、核销码归属全部改为默认收紧,修复线上以 NODE_ENV=development 运行时闸门失效

- 提现审核:未开通真实转账且未显式 ALLOW_SANDBOX_PAY=1 时一律 503,杜绝只改状态不打款

- 预支付:未开启沙箱时不再下发沙箱参数;小程序删除预支付失败伪造沙箱成功的兜底,改为抛错

- 订阅消息支持 MINIPROGRAM_STATE=formal|trial|developer 显式配置,避免真实用户收不到通知

- 动态列表/点赞身份统一 normalizeUserId;文档补充安全闸门与订阅消息环境变量

- 109 套件/720 用例全绿,tsc 构建通过
2026-10-21 11:50:11 +08:00
xcbyy
d06bf11740 security: 危险兜底默认关闭(secure by default)——修复 NODE_ENV 未设导致的身份伪造/沙箱支付/隐私泄露
根因:线上 NODE_ENV 未设为 production 时,以下"开发兜底"全部自动生效:
- resolveSecureUserId 信任客户端声明的 userId → 任意用户身份伪造
- ALLOW_SANDBOX_PAY = ... || !IS_PRODUCTION → 无真实收款即可推进订单(资损)
- GET /api/users/:id 按"本人"返回余额/佣金/手机号 → 隐私泄露

修复(兜底改为必须显式开启):
- 新增 ALLOW_INSECURE_DEV_AUTH(默认 false);resolveSecureUserId 改为 `if (IS_PRODUCTION || !ALLOW_INSECURE_DEV_AUTH) 401`
- ALLOW_SANDBOX_PAY 改为仅 `process.env.ALLOW_SANDBOX_PAY === '1'`
- assertCompanionActor 与用户资料"本人视角"兜底加 ALLOW_INSECURE_DEV_AUTH 限制
- /api/health 新增 mode 与 sandboxPayAllowed;启动自检打印两个危险开关并告警
- 文档补充危险开关说明(生产禁止开启)

验证:本地模拟 NODE_ENV 未设 → 通知/订单/下单 均 401、用户资料不泄露隐私、沙箱支付关闭;
开启 ALLOW_INSECURE_DEV_AUTH=1 后联调能力保留;production 模式行为一致。(冒烟 13/13)
新增 secure-default-auth.spec.ts(103 套件/696 用例全绿)
2026-10-20 16:35:04 +08:00
xcbyy
699d2bd951 security: 后台默认口令生产 fail-closed(修复 admin/admin 可登录的高危漏洞)
- 生产环境未配置 ADMIN_PASSWORD(或仍为 admin/admin123)时,后台登录直接 503 拒绝
- 启动自检新增两条告警:未配有效 ADMIN_PASSWORD、非 production 身份校验放宽
- 部署文档补充 ADMIN_PASSWORD/ADMIN_USERNAME 必配说明
- 新增回归护栏 admin-credential-hardening.spec.ts(88 套件/642 用例全绿);冒烟 5/5
2026-10-19 13:36:36 +08:00