为什么 URL 域中的西里尔字母看起来如此奇怪?

为什么 URL 域中的西里尔字母看起来如此奇怪?

简短解释:

为什么 URL 中的域名中的俄语字符перезагрузкаопмо.рф会随机映射到这样的位置:http://xn--80aaigamcyttbbjfe2c.xn--p1ai。请注意,我不是在谈论 URL 中的解码问题,例如:http://ru.wikipedia.org/wiki/%D0%97%D0%B0%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D0%B0%D1%8F_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D0%B0

详细解释:

我正在调查站点列表最近的 heartbleed 漏洞存在问题,这个域名很奇怪的网站让我很惊讶:http://xn--80aaigamcyttbbjfe2c.xn--p1ai/。在其他情况下,我会认为这是一个 porn/viagra/exploit/dyingNigerianPriceSendingMoney 类型的网站(基于它的神秘名称),但全球排名46000这种事是不可能的。

查看该网站,它看起来像是俄语的,根据谷歌翻译,它是关于政治的。但是谁会访问这个有这种网址的网站呢?当我进一步调查时,我发现它实际上有像这样的正常网址(перезагрузкаопмо.рф/‎)。但当我在地址栏中输入这个网址时,它会将其更改为之前的网址。

那么这里的问题是什么?为什么перезагрузкаопмо.рф/‎ 映射到http://xn--80aaigamcyttbbjfe2c.xn--p1ai/

答案1

那么这里的问题是什么?为什么 перезагрузкаопмо.рф/‎ 映射到http://xn--80aaigamcyttbbjfe2c.xn--p1ai/

DNS 已经过时了,历史上只支持 26 个拉丁字符 A 到 Z 和破折号。我想 DNS 的最初设计者认为它不会持续足够长的时间以用于国际或诸如此类的事情。

但是,互联网当然是国际性的,因此域名也应该是国际性的。

http://xn--80aaigamcyttbbjfe2c.xn--p1ai/实际上是一种叫做Punycode- 这是一种在 DNS 字符集内使用非 DNS 字符集表示域名的方式。这些域名称为国际化域名(国际化域名 (IDN))。

如果配置为这样,大多数最新浏览器都会以本机字符集显示 IDN。Punycode 是后台发送到 DNS 服务器的内容。如果 IDN 未显示在浏览器中,则应更新浏览器或检查设置。

我也有上述印象,但读完之后似乎为了防止使用看起来相似的字符进行域名钓鱼,需要应用算法或白名单来确定哪些 IDN 显示为本地字符或 punycode。

Chrome 算法的一部分是您当前的语言设置。

当我进入 Chrome 的设置,进入语言和输入设置,添加俄语并选择它时,http://xn--80aaigamcyttbbjfe2c.xn--p1ai在浏览器中显示为перезагрузкаопмо.рф。

相关内容