你有没有想过,浏览器地址栏里那个看起来毫无破绽的 apple.com,可能根本不是苹果的网站?域名里混进一个长得一模一样的西里尔字母,肉眼几乎分辨不出来,而浏览器最先进的防护规则,也未必每次都能拦住。
![]()
这件事的源头要追溯到 IETF 决定允许域名使用 Unicode 字符。当时不少技术人员就觉得这一步虽然值得称赞,但暗藏风险:多个字母表里存在大量外形相似甚至完全相同的字符。攻击者正是利用这一点做起了 typo-squatting(错拼抢注)——注册一个和真实网址看起来一模一样的域名,搭起能正常访问的网站,等着用户在搜索结果里点错、或者手滑打错地址时自投罗网。
Chromium 在这类伪装域名的识别上拥有目前最先进的规则集,但再好的代码也有奇怪的边缘情况。Have I Been Squatted(HIBS)的一篇博客文章详细拆解了其中一个案例。
研究人员拿 аррӏө.com 做示范。这个域名和真正的 apple.com 并不相同,却依然绕过了多层防护。原因藏在西里尔字母里:这套字母表为许多拉丁字母准备了形近字,比如 а 对应 a、е 对应 e、о 对应 o、р 对应 p、с 对应 c。看不出差别很正常。
那为什么只混一个形近字不行?如果把西里尔字母 а 塞进 pple.com 中间,会立刻触发 Chromium 的防护机制,浏览器会把域名以 Punycode 格式显示出来,变成 xn--pple-43d.com。除了少数例外,以 .com 结尾、含非拉丁字符的域名,只有所有字符都来自同一字母表才能通过检查。
那全部用西里尔形近字拼成 аррӏе.com 呢?同样行不通。Chromium 维护着一份包含 29 个西里尔字符的清单,这些字符经常冒充拉丁字母,而完全由清单内字符组成的域名是被禁止的。
аррӏө.com 的突破口就在最后那个字符上。右侧那个西里尔字符其实是一个带横线的椭圆,写作 ө,它并不在那份 29 字符清单里。较新版本的 Chromium 可以、也很可能会把它加进去,但这恰恰暴露了问题的难度:检测错拼抢注没有一劳永逸的方案,再完善的规则集,迟早也会在某个边缘案例上站错边。
要玩这场 Unicode 版“宝可梦”、把所有伪装字符抓干净,需要很多双警惕的眼睛。字符集本身还在不断演化,如今已收录近 173,000 个条目,不过其中只有一部分在实践中能用作域名或顶级域。
Chromium 的防护能力在同类中确实领先。2020 年的一项研究显示,它拦截了 64.1% 的此类尝试,Firefox 和 Safari 则落在后面。需要提醒的是,Chrome、Edge、Brave 都构建在 Chromium 之上。除了大量其他规则和逐字母表校验,Chromium 还维护着一份超过 8,000 个易被抢注的热门域名清单,并对其中 836 个执行更严格的检查。域名注册机构同样在做合理范围内的努力,比如严格规定哪些字符能进入哪些顶级域,但这远不足以彻底解决问题。
HIBS 给出的建议很务实:担心被冒充的企业,不妨把各种形近域名都注册下来;同时鼓励用户使用 passkey。passkey 始终绑定在特定域名上,用户没法在一个仿冒网站上用它登录——这一条,比任何字符黑名单都更接近问题的根子。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.