IDN(国际化域名)

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

什么是IDN?

IDN(国际化域名)是包含原始DNS规范中使用的传统ASCII集外字符的域名。IDN使用本地脚本(如中文、阿拉伯文、西里尔文等)启用域名。

为什么IDN很重要

原始DNS是为英语使用者设计的,将域名限制为:

这排除了数十亿不主要使用拉丁字母的人。IDN通过以下方式民主化互联网:

IDN的工作原理:Punycode连接

DNS基础设施只理解ASCII,所以IDN使用称为Punycode的巧妙编码系统。当你注册或访问IDN时:

1. 用户输入:中文.com(中文为"中文")

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支持

IDN支持因TLD而异:

完全支持

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

国际化TLD

有些TLD本身是IDN:

有限或无支持

某些TLD限制IDN或根本不支持。始终验证你的目标TLD的IDN支持。

安全考虑:同形异义体攻击

IDN通过同形异义体攻击引入安全风险,其中来自不同脚本的视觉相似字符创建欺骗域:

apple.com   (合法 - 拉丁字母)

аpple.com (攻击 - 西里尔'а'看起来像拉丁'a')

防御同形异义体攻击的保护

浏览器行为:现代浏览器为可疑的IDN显示Punycode,而不是Unicode形式,暴露攻击。 注册局政策:某些注册局限制在单个域中可以组合哪些字符集。 域名监控:DomScan的typosquatting检测等工具可以识别你品牌的已注册同形异义体变体。

实现IDN支持

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

验证

// 检查域名是否包含非ASCII

function isIDN(domain) {

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

}

转换

// 转换为Punycode进行DNS查询

const punycode = require('punycode/');

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

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

RDAP查询

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

# 两者都可以

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 检查域名可用性、健康状态等。