快速回答
什么是 IDN 同形字符攻击?
IDN 同形字符攻击会注册一个国际化域名,其中的西里尔或希腊字母看起来像拉丁字母,使 exаmplecoin.com 读起来像 examplecoin.com。它以 xn-- 开头的 punycode 形式存储。Chrome 会对混合文字的标签显示这种原始形式,并且自 51 版起忽略用户的语言设置。Wardmint 注册您名称的 ASCII 变体。
看起来相同的名称以及系统存储的内容
| 显示为 | 区别在哪里 | 在 DNS 中存储为 |
|---|---|---|
| examplecoin.com | 纯拉丁字母,真实名称 | examplecoin.com |
| exаmplecoin.com | 第二个字母是西里尔字母 а (U+0430),与拉丁字母混合 | xn--exmplecoin-0qi.com |
| еxamplecoin.com | 第一个字母是西里尔字母 е (U+0435),与拉丁字母混合 | xn--xamplecoin-jsi.com |
| аррӏе.com | 每个字母都是西里尔字母:а、р、р、ӏ、е | xn--80ak6aa92e.com |
node -e "console.log(require('url').domainToASCII('аррӏе.com'))"
# xn--80ak6aa92e.comIDN 同形字符攻击是如何运作的?
它之所以奏效,是因为 Unicode 包含来自不同字母表而外观相同的字母,而域名系统允许任何人注册使用它们的名称。国际化域名 (IDN) 是包含非 ASCII 字符的名称。DNS 只处理 ASCII,所以每个这样的标签都被转换为 punycode,这是一个以 xn-- 开头、后面跟着编码形式的字符串。如果浏览器决定显示,人们会看到 Unicode 版本;存储或记录该名称的软件看到的则是 xn-- 形式。
攻击者注册一个名称,其中一个或多个拉丁字母被相似字符替换:例如用西里尔字母 а 代替拉丁字母 a。注册局和注册商会接受它,因为它是有效的名称。访问者读到的是 examplecoin.com,然后在您网站的副本上签署了一笔交易。
xn-- 前缀是什么意思?
前缀 xn-- 标记一个以编码形式包含非 ASCII 字符的标签。在上面的示例中,xn--exmplecoin-0qi.com 是 exаmplecoin.com 的存储形式:标签中的 ASCII 字母在前,编码后的西里尔字符跟在连字符之后。以 xn-- 开头的名称本身并不是恶意的;许多其他语言的正当网站都使用它。重要的是解码后的字符串是否在模仿某个品牌。在点击之前,您可以用类似上面的脚本解码任何可疑的名称,或把它粘贴到查询工具中。
Chrome 如何决定显示 Unicode 还是 punycode?
Chrome 对每个标签分别判断,只要有一项检查失败,就显示 xn-- 形式。文档记载的检查包括:混用不应混用的文字(拉丁字母与西里尔或希腊字母)、来自 Unicode 安全数据的混合文字易混淆字符,以及当后缀不属于该文字时,仅由来自同一种文字的相似字母构成的标签。Chrome 还会拒绝仅由数字或相似数字的字符构成的标签,以及去掉重音符号后与顶级域名匹配的标签。如果所有检查都通过,则该标签以 Unicode 显示。该策略不取决于用户的语言设置。
表中全部为西里尔字母的 аррӏе.com 属于整体文字的情形:它没有混用任何文字,所以混合文字规则抓不到它,Chrome 依靠的是其单独的整体文字检查。其他浏览器有自己的策略,Wardmint 尚未阅读,所以本页只记录 Chrome。一般意义上地址混淆的相关风险见 钓鱼者注册的仿冒域名类型。
我该如何保护我的品牌免受同形字符域名的侵害?
注册您能注册的 ASCII 变体,监控其余的,并举报您发现的情况。同形字符名称无法由您预先在每种文字中全部注册,因为组合太多了。您能做的是去搜索它们:dnstwist 根据经过研究的 Unicode 字符集生成同形字符名称并检查哪些存在,证书日志则会显示以解码形式带有您品牌的名称。发现仿冒域名的指南 提供了命令,如何监控 Certificate Transparency 则涵盖日志。
Wardmint 的页面描述的是 ASCII 名称的注册,并不声称提供 IDN 注册。对于 ASCII 同形字符(用 1 代替 l,用 rn 代替 m),覆盖方式与任何拼写错误相同:见 如何保护您的品牌免受域名抢注。
Wardmint 的数据对此怎么说?
Wardmint 于 2026 年 11 月 12 日核查了 Chromium 的策略,并将其规则归为决定显示 Unicode 还是 punycode 的 5 类检查:转换和有效性、文字混用、数字编号和不可见字符、易混淆字符,以及数字、模式和顶级域名。这种分组是 Wardmint 自己的;规则是 Chromium 的。
同形字符域名是指字母与已知名称不同但对读者来说看起来完全相同的域名。IDN 同形字符攻击是利用这样的名称来冒充品牌。Punycode 是以 xn-- 开头的 ASCII 编码,DNS 用它来存储含有非 ASCII 字母的名称。
关于同形字符攻击的常见问题
我能看到 Unicode 域名背后的真实名称吗?
可以。用一行脚本或查询工具将其转换为存储形式,然后阅读 xn-- 字符串和注册商数据。与您预期的名称不符就是一个警告。
HTTPS 锁形图标能保护我免受同形字符网站的侵害吗?
不能。仿冒域名可以像任何其他域名一样获得证书,所以锁形图标证明的是加密连接,而不是网站的身份。
Chrome 会屏蔽所有同形字符域名吗?
不会。它应用一套有文档记载的检查,当其中一项失败时显示 punycode。通过所有检查的名称会以 Unicode 显示,所以请谨慎对待不熟悉的链接。
我可以像举报其他钓鱼域名一样举报 IDN 仿冒域名吗?
可以。通过注册商的滥用举报途径,提供存储的 xn-- 名称、解码后的名称和一张屏幕截图。步骤与任何钓鱼域名相同。
小结
- IDN 同形字符攻击用其他文字中的相似字符替换拉丁字母。
- DNS 将该名称存储为以 xn-- 开头的 punycode。
- Chrome 按标签逐个判断,并自 51 版起忽略用户的语言。
- Chrome 会将混合拉丁字母和西里尔字母的标签显示为 xn--。
- HTTPS 不能证明谁拥有仿冒域名。
- 用 dnstwist 和证书日志找出它们;作为钓鱼域名举报。
- Wardmint 在 29 个后缀上注册您自己名称的 ASCII 变体。
来源 (2)
- Chromium IDN 显示策略 (docs/idn.md) — The Chromium Projects (读取于 2026-11-12)
- dnstwist,域名排列引擎 — GitHub (elceef/dnstwist) (读取于 2026-11-12)