实现示例const confusables = new Map<string, string>([ ['а','a'],['е','e'],['і','i'],['ο','o'],['р','p'],['ѕ','s'],['ν','v'] ]) function normalizeName(n: string): string { return n.normalize('NFKC') } function hasNonAscii(n: string): boolean { return /[^\x00-\x7F]/.test(n) } function replaceConfusables(n: string): string { let out = ''; for (const ch of n) out += confusables.get(ch) || ch; return out } function suspicious(n: string): boolean { const norm = normalizeName(n) if (/^@/.test(norm)) return false if (hasNonAscii(norm)) return true const rep = replaceConfusables(norm) return rep !== norm } function allowName(n: string, allow: Set<string>): boolean { if (allow.has(n)) return true return !suspicious(n) } 审计与CI门禁对新包名执行检测;命中混淆阻断并输出近似名称建议。白名单变更需审批与到期;产线默认拒绝未审批项。

发表评论 取消回复