跳到主内容
快讯直播
AI智模界
AI 词典

Unicode 同形字攻击:长得一样的字母如何骗过过滤器

一句话定义:Unicode 同形字攻击(Homoglyph Attack)是指用另一个“长得几乎一模一样”的字符替换原文中的字符,让字符串在机器看来已经不同、在人的眼里却毫无差别,从而绕过关键词匹配、黑名单和内容检测。

为什么能做到

Unicode(统一码)为了容纳全世界的文字,收录了来自不同书写系统的海量字符。问题在于,这些字符并不总是长得很不一样:拉丁字母、西里尔字母、希腊字母里有大量“撞脸”的成员。常见例子:

你看到的可能是拉丁字母可能是西里尔/希腊字母
aa(U+0061)а(西里尔 U+0430)
oo(U+006F)о(西里尔)、ο(希腊)
ppр(西里尔)
ccс(西里尔)

看起来完全一样,但字符编码不同。过滤器做的是逐字比较,比较时认的是编码;人做的是看图,看图时认的是形状。这两套判断标准对不上,于是前面说的绕过就成立了。

打个比方:门禁只比对身份证号,不比对照片。有人拿着一个号码不同、但照片和你一模一样的证件,机器放行,保安肉眼也看不出破绽。

一个词里的某个字母被换成同形字后,关键词黑名单就匹配不到了;而语言模型在分词和理解时往往仍能读出原意,于是“过滤没有拦住、模型却读懂了”这个缺口就出现了。同类思路还有在词中间插入零宽字符(Zero-Width Character),肉眼完全看不见,但字符串已经变了。

和相邻概念的区别

  • 拼写错误或变体:错别字肉眼能看出来,同形字看不出来。
  • 编码错误(乱码):乱码是渲染失败,同形字是合法字符,显示完全正常。
  • 对抗性扰动:那是在语义或向量层面做手脚,通常带一串看着奇怪的词;同形字只动字符本身。
  • 国际化域名仿冒(IDN Homograph):这是同形字攻击在域名上的应用,比如把某个品牌名里的字母换成西里尔同形字,做出一个肉眼难辨的钓鱼网址。

对实际工作的意义

做内容安全、风控、合规过滤的团队,如果只靠字符串黑名单,基本挡不住这一层。通行做法是先做 Unicode 规范化(Normalization,常用 NFKC),再做同形字映射归并——统一码联盟(Unicode Consortium)长期维护一份可混淆字符表(confusables),具体规则和文件以官方页面为准。更稳的思路是把检测放到分词后或语义层,而不是纯字符层。

做评测的人也要留意:测试集里如果只有“原样”的违规样本,指标会虚高;加上同形字变体,才是真实分布。

对普通人来说,这件事的现实版本是钓鱼链接和仿冒账号。看到域名或用户名时,别只看“像不像”,点进去之前多确认一次来源,涉及账号、支付尤其如此。

AI 生成本文由 AI 基于公开信息自动生成,仅供参考。