refactor: HTTP checker 质量加固
- failure actual 截断格式改为 …(共 N 字符),标量不序列化直接返回 - 新增 redos.ts 实现 ReDoS 静态检测(嵌套量词/重叠交替),启动期拒绝危险正则 - JSON body rules 共享同一次 JSON.parse 结果,避免重复解析 - checkCssRule 重构为线性流程,消除 exist:true 与无 operator 的冗余分支 - extract checkEarlyTimeout 辅助函数,明确提前 duration 检查意图 - 补充 303/307/308 重定向、相对路径 Location、混合 body rules 集成测试
This commit is contained in:
25
tests/server/checker/runner/shared/redos.test.ts
Normal file
25
tests/server/checker/runner/shared/redos.test.ts
Normal file
@@ -0,0 +1,25 @@
|
||||
import { describe, expect, test } from "bun:test";
|
||||
|
||||
import { isUnsafeRegex } from "../../../../../src/server/checker/expect/redos";
|
||||
|
||||
describe("isUnsafeRegex", () => {
|
||||
test("识别嵌套量词", () => {
|
||||
expect(isUnsafeRegex("(a+)+$")).toBe(true);
|
||||
expect(isUnsafeRegex("(a*)*")).toBe(true);
|
||||
expect(isUnsafeRegex("(a?)+")).toBe(true);
|
||||
expect(isUnsafeRegex("(\\d+)*x")).toBe(true);
|
||||
expect(isUnsafeRegex("(?:a+)+")).toBe(true);
|
||||
});
|
||||
|
||||
test("识别重叠交替分支", () => {
|
||||
expect(isUnsafeRegex("(a|a)+")).toBe(true);
|
||||
expect(isUnsafeRegex("(a|aa)*")).toBe(true);
|
||||
});
|
||||
|
||||
test("安全正则不误判", () => {
|
||||
expect(isUnsafeRegex("\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}")).toBe(false);
|
||||
expect(isUnsafeRegex("^(ok|healthy)$")).toBe(false);
|
||||
expect(isUnsafeRegex("^[a-z0-9_-]+$")).toBe(false);
|
||||
expect(isUnsafeRegex("([a+])+")).toBe(false);
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user