文件
shanghaipeiwan/server/tests/auth-secret-guard.spec.ts
xcbyy 40e601e345 fix(security): 鉴权签名密钥 fail-closed,禁用仓库内置默认密钥
- ADMIN_TOKEN_SECRET 的随机化闸门由 NODE_ENV 改为 SECURE_MODE:线上以 development 运行时不再使用公开默认密钥(该密钥可伪造管理员/用户 token)

- 运行模式与安全开关常量前移到模块顶部,避免鉴权常量初始化顺序问题

- 启动自检与回归用例同步(109 套件/720 用例全绿)
2026-10-21 12:14:16 +08:00

29 行
1.1 KiB
TypeScript

此文件含有模棱两可的 Unicode 字符

此文件含有可能会与其他字符混淆的 Unicode 字符。 如果您是想特意这样的,可以安全地忽略该警告。 使用 Escape 按钮显示他们。

// 已读取AGENTS.md
import * as fs from 'fs';
import * as path from 'path';
/**
* 第十八批回归闸门:生产环境不得使用仓库内置默认 admin 密钥
*/
describe('第十八批鉴权密钥安全闸门', () => {
const rootDir = path.resolve(__dirname, '../../');
const indexCode = fs.readFileSync(path.join(rootDir, 'server/src/index.ts'), 'utf-8');
it('不得再以仓库内置默认密钥作为静默回落', () => {
expect(indexCode).not.toContain("process.env.ADMIN_TOKEN_SECRET || 'peiwan_admin_token_secret_v1'");
});
it('必须存在默认密钥常量与 fail-closed 随机化闸门(不依赖 NODE_ENV)', () => {
expect(indexCode).toContain('const DEFAULT_ADMIN_TOKEN_SECRET =');
const start = indexCode.indexOf('const DEFAULT_ADMIN_TOKEN_SECRET =');
const block = indexCode.slice(start, start + 1200);
expect(block).toContain('if (SECURE_MODE)');
expect(block).toContain('crypto.randomBytes');
expect(block).toContain('SECURITY');
});
it('管理员 token 校验必须使用常量时间比较', () => {
expect(indexCode).toContain('crypto.timingSafeEqual');
});
});