ñandú.com.arxn--and-6ma2c.com.armünchen.dexn--mnchen-3ya.decontacto@correo.españa.escontacto@correo.xn--espaa-rta.eshttps://日本語.jp/ページhttps://xn--wgv71a119e.jp/%E3%83%9A%E3%83%BC%E3%82%B8аррӏе.comxn--80ak6aa92e.com该标签完全由外观与拉丁字母相同的西里尔字母或希腊字母组成,可能在冒充知名域名:信任该链接前请检查其 xn-- 形式。
使用纯 Punycode 算法对任意文本进行编码或解码,不添加 xn-- 前缀,也不进行域名规范化。可用于调试你自己的实现。
maana-pta工作原理
DNS 只接受 ASCII 字母、数字和连字符,因此像 ñandú.com.ar 这样的域名无法原样传输。国际化域名(IDN)通过 Punycode(RFC 3492)解决这一问题:每个含有非 ASCII 字符的标签都会用一种算法编码——保留普通字母,并在末尾附加特殊字符的位置信息——然后加上 xn-- 前缀。于是 ñandú 就变成了 xn--and-6ma2c。
编码之前,IDNA 会对名称进行规范化:转换为小写、统一 Unicode 形式,并转换日文 。 等替代句点。本工具使用与浏览器打开地址时相同的映射(UTS #46),因此结果与最终向 DNS 查询的内容一致。对于电子邮件仅转换域名部分,对于 URL 仅转换主机部分。
此外,它还会按长度和所用文字拆解每个标签,并在域名混用多种文字,或使用与拉丁字母外观完全相同的西里尔字母或希腊字母书写时发出警告:这正是同形异义字攻击的基础,即让链接看起来像是来自知名网站。
示例
ñandú.com.arxn--and-6ma2c.com.ar只有含特殊字符的标签会变化,com 和 ar 保持不变。这正是需要填入 DNS 和证书 SAN 中的形式。faß.dexn--fa-hia.de在 IDNA2008 中,德语的 ß 是有效字母,会被编码。按照旧标准它会被转换为 ss,指向另一个域名 fass.de:因此一些旧系统会解析到不同的目标。аррӏе.comxn--80ak6aa92e.comXudong Zheng 于 2017 年公布的同形异义字示例:五个西里尔字母,看起来与 apple 完全相同。此后 Chrome 和 Firefox 会以 xn-- 形式显示这类域名。пример.рфxn--e1afmkfd.xn--p1ai顶级域名也可以国际化:.рф 是俄罗斯的西里尔文顶级域名,在 DNS 中写作 xn--p1ai。使用场景
- 获取中文或带重音域名的 xn-- 形式,用于添加 DNS 记录、配置 nginx 或 Apache,或填写证书的 SAN。
- 弄清日志、钓鱼举报或浏览器地址栏中出现的 xn-- 背后的真实域名。
- 检查可疑链接,找出模仿拉丁字母的西里尔字母或希腊字母。
- 为不支持 SMTPUTF8 的服务器转换国际化电子邮件地址的域名。
- 确认国际化域名编码后每个标签不超过 63 个字符。
常见问题
xn-- 前缀是什么意思?
它是 ACE(ASCII Compatible Encoding)前缀,表示该标签采用 Punycode 编码。第三和第四位为连字符的标签被保留给这类前缀,因此除非是有效的 IDN,注册局不允许注册以 xn-- 开头的域名。
在 DNS、Web 服务器和证书中应使用哪种形式?
所有技术场合都使用带 xn-- 的 ASCII 形式:DNS 记录、nginx 的 server_name、Apache 的 ServerName、证书的 SAN 以及 Host 请求头。Unicode 形式仅用于向人展示;浏览器会在查询前进行转换。
什么是同形异义字攻击?
指利用其他字母表的字母(例如用西里尔字母 a 代替拉丁字母 a)注册一个看起来与另一个域名完全相同的域名。当标签混用多种文字或与知名域名相似时,浏览器会显示其 xn-- 形式。如果一个链接看起来正常,但其 ASCII 形式以 xn-- 开头,请保持警惕。
电子邮件地址中可以使用非 ASCII 字符吗?
域名部分可以,并且可以为任何服务器转换为 xn-- 形式。@ 之前的部分则是另一回事:若包含非 ASCII 字符,需要传输路径上的所有服务器都支持 SMTPUTF8(RFC 6531),而且它没有对应的 Punycode 形式。
为什么我的带大写字母的域名变了?
域名不区分大小写,IDNA 会在编码前将所有字符转换为小写:MÜNCHEN.de 和 münchen.de 是同一个域名 xn--mnchen-3ya.de。而纯 Punycode 会保留大写字母,因此无前缀转换器会得出不同的结果。