IDN(国际化域名)

域名基础
包含非ASCII字符(如中文、阿拉伯文或西里尔文脚本)的域名,支持本地语言网址。
← 返回词汇表

什么是 IDN?

IDN(国际化域名)是包含传统 DNS 规范所用 ASCII 字符集之外字符的域名。IDN 让人们可以使用本民族文字注册域名,例如中文(中文.com)、阿拉伯文(مثال.com)、西里尔文(пример.com)以及许多其他文字。

IDN 为什么重要

最初的 DNS 是为英语使用者设计的,域名字符受到以下限制:

这排除了数十亿不使用拉丁字母语言的人。IDN 通过以下方式让互联网更加普惠:

IDN 如何工作:Punycode 的作用

DNS 基础设施只能理解 ASCII,因此 IDN 使用一种称为 Punycode 的编码系统。当你注册或访问 IDN 时:

1. 用户输入:中文.com(“Chinese”的中文写法)

2. 浏览器编码:xn--fiq228c.com(Punycode 表示形式)

3. DNS 解析:执行标准 ASCII 查询

4. 浏览器显示:中文.com(原始形式)

前缀 “xn--” 表示该字符串经过 Punycode 编码。这个过程对用户是透明的。

Punycode 示例

IDNPunycode
münchen.dexn--mnchen-3ya.de
中文.comxn--fiq228c.com
правда.рфxn--80aafi6cg.xn--p1ai

各 TLD 的 IDN 支持

不同 TLD 的 IDN 支持情况不同:

完整支持

大多数现代 gTLD 和许多 ccTLD 都支持 IDN:

国际化 TLD

有些 TLD 本身就是 IDN:

有限支持或不支持

一些 TLD 会限制 IDN,或完全不支持 IDN。注册前应始终确认目标 TLD 的 IDN 政策。

安全注意事项:同形异义字符攻击

IDN 可能带来安全风险:攻击者使用不同文字体系中外观相似的字符,构造具有欺骗性的域名,这称为同形异义字符攻击

apple.com   (legitimate - Latin letters)

аpple.com (attack - Cyrillic 'а' looks like Latin 'a')

防范同形异义字符攻击

浏览器行为:现代浏览器会对可疑 IDN 显示 Punycode,而不是 Unicode 形式,以暴露潜在攻击。 注册局政策:一些注册局会限制同一域名中可以组合使用的字符集。 域名监控:DomScan 的错拼检测等工具可以识别已注册的品牌同形变体。

实现 IDN 支持

对于构建域名工具的开发者:

验证

// Check if domain contains non-ASCII

function isIDN(domain) {

return /[^\x00-\x7F]/.test(domain);

}

转换

// Convert to Punycode for DNS queries

const punycode = require('punycode/');

const ascii = punycode.toASCII('中文.com'); // xn--fiq228c.com

const unicode = punycode.toUnicode('xn--fiq228c.com'); // 中文.com

RDAP 查询

大多数 RDAP 服务器同时接受两种形式:

# Both work

curl "https://rdap.verisign.com/com/v1/domain/xn--fiq228c.com"

curl "https://rdap.verisign.com/com/v1/domain/中文.com"

最佳实践

使用 IDN 时:

1. 始终在内部存储和处理 Punycode 形式

2. 向用户显示 Unicode 形式

3. 为安全功能实现同形异义字符检测

4. 注册前确认特定 TLD 的 IDN 政策

将知识付诸实践

使用 DomScan 的 API 检查域名可用性、健康状态等。