你眼前的两段文字 binance.com 与 binаnce.com,能看出区别吗?后一个的 а 是西里尔字母,与拉丁字母 a 几乎完全相同。这就是同形异码(Homograph)攻击——肉眼骗术中最难防的一种。本文教你识别 + 防御。日常先固定从校验过的入口进 币安官网,移动端 币安官方APP,iOS 没装 App 看 iOS 安装教程。
一、同形异码原理
国际化域名(IDN)允许域名包含非 ASCII 字符。本意是让中文/日文/俄文用户用本地语言注册域名。问题是:很多字符在视觉上与英文字母完全一致,但在编码上是不同字符。
域名层面,浏览器把这些字符转成 Punycode:
binаnce.com(包含西里尔 а)实际是xn--binnce-b8a.comgoogĺe.com(带重音 ĺ)实际是xn--googe-x9a.com
但默认情况下浏览器显示 Unicode 形式,于是用户看到的依然是 binаnce.com,与 binance.com 完全一样。
二、最容易被替换的拉丁字母
下表是同形异码攻击中最常用的替换对照:
| 原字符 | 视觉相似的字符 | 编码字符集 |
|---|---|---|
| a | а / α | 西里尔 / 希腊 |
| e | е / ё | 西里尔 |
| o | о / ο / 0 | 西里尔 / 希腊 / 数字 |
| i | і / ί / l / 1 | 西里尔 / 希腊 / 拉丁L / 数字1 |
| c | с / ϲ | 西里尔 / 希腊 |
| p | р / ρ | 西里尔 / 希腊 |
| n | η / n | 希腊 / 全角 |
| b | Ь / b | 西里尔 / 全角 |
币安域名中的 b/i/n/a/n/c/e 每一个字母都有可能被替换。组合下来钓鱼变种数量惊人。
三、识破同形异码的两种方法
方法 A:浏览器开启 Punycode 显示
Firefox 是最稳的。在地址栏输入 about:config,搜索 network.IDN_show_punycode,把它改成 true。设置后所有非 ASCII 域名会以 xn-- 形式显示,肉眼立刻能看出异常。
Chrome 没有原生设置,但当域名同时包含拉丁与非拉丁字符时会自动以 Punycode 显示。完全用非拉丁字符的"纯西里尔域"则会原样显示,需要扩展辅助。
方法 B:复制粘贴到文本编辑器
把地址栏的 URL 复制粘贴到记事本或代码编辑器(VS Code 推荐),换一种字体显示。VS Code 的等宽字体会让 а 与 a 出现微小差异。或者直接用十六进制查看插件,每个字符的 Unicode 码点一目了然。
方法 C:肉眼辅助工具
把鼠标放在域名上仔细看每个字母:
- a 的圆形是否标准
- e 的横线位置是否正常
- o 是否标准的圆
- i 上的点是否在中间
任何一个字母看起来略有偏差,就警惕。
四、浏览器层面的额外加固
Chrome 扩展
- EnGuard(PhishFort):自动检测同形异码并警告
- Punycode Alert:在地址栏插入 Punycode 提示
系统层面
- 在 hosts 文件里把已知钓鱼变种黑洞掉:
0.0.0.0 xn--binnce-b8a.com - 用 Pi-hole 这类家庭级 DNS 网关订阅反钓鱼黑名单
密码管理器
1Password、Bitwarden 在域名严格匹配时才弹出自动填充。如果你打开的是同形异码域,密码管理器不会响应——这是天然的"识别报警"。
五、移动端的特殊性
手机地址栏短,字符显示更小,同形异码更难看出。建议:
- 完全用 APP,不在浏览器输入域名
- 浏览器开启"显示完整 URL"
- 收到链接时长按预览目标 URL,不要直接点
iOS Safari 长按链接弹出预览,可以看完整 URL;安卓 Chrome 长按同样可预览。
六、当你已经访问了同形异码域
按以下顺序处置:
- 立即截图地址栏,复制完整 URL 留底
- 关闭页面,清浏览器该域 Cookie
- 检查是否在该页输入过任何信息——若是,按账号被盗应急流程处置
- 在干净浏览器中打开 binance.com 检查账号状态
- 把这个 URL 通过币安帮助中心举报渠道提交
FAQ
Q1:为什么浏览器要默认显示 Unicode 不显示 Punycode? 为了非英语国家用户的便利。如果俄国用户的域名总是显示 xn--xxxx 形式,体验非常差。所以默认显示 Unicode,但混合字符串会自动 Punycode。
Q2:开启 Firefox 强制 Punycode 后非英语网站会受影响吗? 正常英语网站完全不变。中文、俄文等域名会显示成 xn-- 形式。如果你不访问这些域名,完全无影响。
Q3:HTTPS 证书是不是能识别同形异码? 能。证书的 Subject 字段是真实编码的字符串,与肉眼看到的会有差异。仔细看证书细节就能识破。
Q4:APP 内会被同形异码攻击吗? APP 不依赖域名输入,所有连接走代码内置的 API endpoint。同形异码对 APP 用户基本无效。