实现示例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门禁对新包名执行检测;命中混淆阻断并输出近似名称建议。白名单变更需审批与到期;产线默认拒绝未审批项。

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部