import type { AuditContext, RuleCheck } from './types'; export declare function sanitizeDetailLine(line: string): string; /** * NFKC 归一化 + 零宽字符剥离 + leet speak 反转(供两处评分复用) * 全角字符转半角;leet 字符反转(1→i, 0→o, 3→e 等) * * NFKC 归一化按 Unicode 标准**不映射**零宽/格式控制符(它们不是兼容字符), * 故攻击者可在 payload 中插入 U+200B(零宽空格)等不可见字符绕过字符串匹配 * (如 `sk\u200B-abc123` 匹配不到密钥模式)。需在 NFKC 之后、leet 反转之前 * **显式剥离**这些格式控制符。只剥离不可见控制符,不动有意义的 Unicode * (CJK / emoji 等保留)。 * * 处理顺序:NFKC 归一化 → 零宽字符剥离 → leet 反转 * @returns 归一化后的字符串 */ export declare function normalizeLine(line: string): string; /** * 仅遍历高置信度模式评分(用于字符串/注释上下文降级)。 * 与 scoreLine 逻辑一致,但跳过 MEDIUM 模糊档。 * @returns 0.0 ~ 1.0 的可疑度评分 */ export declare function scoreLineHighOnly(line: string, wasTransformed: boolean): number; /** * 代码/正文上下文评分:完整模式(HIGH + MEDIUM)。 * 与改动前 checkRuleA9 对单行的评分语义保持一致。 */ export declare function scoreFullContext(s: string): number; /** * 字符串/注释上下文评分:仅高置信度模式(MEDIUM 模糊档关闭)。 * 用于消除 MEDIUM 档在文案/注释中的误报;HIGH 真注入仍照常检测。 */ export declare function scoreHighOnlyContext(s: string): number; /** * 启发式地把一行代码拆成「代码/正文」「字符串字面量」「注释文本」。 * 注意:这是启发式实现,不是完整 parser,仅用于注入扫描的上下文降级判定。 * * @returns * - code: 去掉字符串字面量与注释后的代码骨架(用空格替换被移除片段,长度无关) * - literals: 提取出的字符串字面量内容(不含引号)+ 注释文本(不含注释标记)数组 * - comments: 仅注释文本数组(不含字符串字面量,P1-A3 注释扫描用) */ export declare function splitCodeContext(line: string): { code: string; literals: string[]; comments: string[]; }; export declare function checkRuleA9(ctx: AuditContext): RuleCheck; //# sourceMappingURL=rule-a9-no-injection.d.ts.map