// 已读取AGENTS.md import * as fs from 'fs'; import * as path from 'path'; /** * 第八十七批:危险兜底默认关闭(secure by default)。 * 背景:线上 NODE_ENV 未设为 production 时, * - resolveSecureUserId 会信任客户端声明的 userId(任意身份伪造) * - ALLOW_SANDBOX_PAY 为 true(无真实收款即可推进订单) * - GET /api/users/:id 会按"本人"返回余额/佣金/手机号 * 修复:以上兜底全部改为必须显式开启 ALLOW_INSECURE_DEV_AUTH=1 / ALLOW_SANDBOX_PAY=1。 */ describe('第八十七批危险兜底默认关闭闸门', () => { const root = path.resolve(__dirname, '../../'); const indexCode = fs.readFileSync(path.join(root, 'server/src/index.ts'), 'utf-8'); const doc = fs.readFileSync(path.join(root, 'docs/部署验收与1分钱支付闭环.md'), 'utf-8'); it('身份兜底需显式开启(生产或未开启均 401)', () => { expect(indexCode).toContain("const ALLOW_INSECURE_DEV_AUTH = process.env.ALLOW_INSECURE_DEV_AUTH === '1';"); expect(indexCode).toContain('if (IS_PRODUCTION || !ALLOW_INSECURE_DEV_AUTH)'); }); it('沙箱支付必须显式开启(不再按 NODE_ENV 自动放行)', () => { expect(indexCode).toContain("const ALLOW_SANDBOX_PAY = process.env.ALLOW_SANDBOX_PAY === '1';"); expect(indexCode).not.toContain("process.env.ALLOW_SANDBOX_PAY === '1' || !IS_PRODUCTION"); }); it('用户资料/大神资料的"本人视角"兜底同样需显式开启', () => { const matches = indexCode.match(/if \(!IS_PRODUCTION && ALLOW_INSECURE_DEV_AUTH\)/g) || []; expect(matches.length).toBeGreaterThanOrEqual(2); }); it('启动自检提示危险开关状态', () => { expect(indexCode).toContain('已开启 ALLOW_INSECURE_DEV_AUTH=1'); expect(indexCode).toContain('已开启 ALLOW_SANDBOX_PAY=1'); expect(indexCode).toContain('ALLOW_INSECURE_DEV_AUTH=${ALLOW_INSECURE_DEV_AUTH}'); }); it('部署文档说明这两个危险开关默认关闭', () => { expect(doc).toContain('ALLOW_INSECURE_DEV_AUTH=1'); expect(doc).toContain('ALLOW_SANDBOX_PAY=1'); expect(doc).toContain('生产环境绝对不要开启'); }); });