- ADMIN_TOKEN_SECRET 的随机化闸门由 NODE_ENV 改为 SECURE_MODE:线上以 development 运行时不再使用公开默认密钥(该密钥可伪造管理员/用户 token) - 运行模式与安全开关常量前移到模块顶部,避免鉴权常量初始化顺序问题 - 启动自检与回归用例同步(109 套件/720 用例全绿)
29 行
1.1 KiB
TypeScript
29 行
1.1 KiB
TypeScript
// 已读取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');
|
||
});
|
||
});
|