有什么方法可以正确显示 IDN?

问题描述

我制作了一个作品集网站并选择使用带有西里尔字符的域。可悲的是,它显示为“xn--80afg8d.me”,这太丑了。

有什么办法可以让浏览器正确显示吗?其他 IDN 是否也会发生同样的情况,例如日本的 IDN?

解决方法

很遗憾,浏览器供应商使用这种“punycode”(RFC 3492) 表示来提高与其最终用户相关的安全性。这在很大程度上是为了避免同形异义词攻击,即恶意行为者使用西里尔字符注册域名,这些字符看起来与其他拉丁字符略有不同,这将更容易对用户发起网络钓鱼攻击。

Google 有 an interesting document in their chromium source control 解释了在 Chromium/Chrome 中发生这种情况的原因和方式:

多年前,域只能由拉丁字母 A 组成 Z、数字和其他一些字符。国际化域名 (IDN) 的创建是为了更好地支持 Web 的非拉丁字母 全球用户。

来自不同(甚至相同!)语言的不同字符可以 看起来非常相似。我们已经看到了概念验证攻击的报告。 这些被称为同形异义词攻击。例如,拉丁语“a”看起来像一个 很像西里尔字母“а”,所以有人可以注册 http://ebаy.com (使用西里尔字母“а”),可能与 http://ebay.com 混淆。 这是 URL 通常在浏览器中显示方式的限制, 不是 Chrome 中的特定错误。

在一个完美的世界中,域名注册商不会允许这些容易混淆的 要注册的域名。一些域名注册商正是这样做的, 主要是通过限制允许的字符,但很多没有。到 为了更好地抵御这些攻击,浏览器会在 punycode(看起来像 xn--...)而不是原始的 IDN,根据 到他们自己的 IDN 政策。

其他主要供应商也发布了类似的文档:

由于这是在单个浏览器级别处理的,如果您真的坚持要绕过域的这种 punycode-ification,则必须与每个浏览器供应商合作,以了解如何将您的域列入白名单,以便它不再以这种方式显示。粗略搜索此类流程并没有发现该领域的太多实质内容,因此最好的办法可能是直接与供应商联系。除非您的西里尔文域是 Internet 上访问量最大的约 500 个站点之一,否则我不会对此屏住呼吸。