Punycode

도메인 기초
유니코드 도메인 이름을 ASCII 호환 형식으로 변환하여 국제화된 도메인 이름이 DNS와 작동할 수 있도록 하는 인코딩 시스템입니다.
← 용어집으로 돌아가기

Punycode 란 무엇입니까?

Punycode는 RFC 3492에서 정의된 인코딩 구문으로 유니코드 문자열을 DNS에 의해 지원되는 제한된 ASCII 문자로 변환합니다. 그것은 가능한 국제화 된 도메인 이름 (IDNs)을 만드는 기술 기반, 기존의 DNS 인프라와 작업 할 수있는 모든 언어의 도메인 이름을 허용.

문제 Punycode 해결

도메인 네임 시스템은 ASCII 문자를 염두에 두고 1980년대에 설계되었습니다. DNS 상표는 포함될 수 있습니다:

이 제한은 주로 라틴 알파벳을 사용하지 않는 인터넷 사용자의 억을 제외. Punycode는 유효한 ASCII로 Unicode 문자열을 인코딩하여이 간격을 브릿지합니다.

Punycode 인코딩 작동 방법

Punycode는 ASCII 문자를 인코딩하면서 ASCII 문자를 컴팩트한 ASCII 표현으로 보존하는 clever 알고리즘을 사용합니다.

Encoding 프로세스

1. 캐릭터 : ASCII 및 비 ASCII 문자로 분할

2. Copy ASCII : 모든 ASCII 문자를 원래 위치에 유지

3. 인코딩 Non-ASCII: 일반 변수 길이 정수 인코딩 사용

4. Add Prefix: Punycode 인코딩을 나타내는 Prepend "xn--"

이름 *

원본 (Unicode)인코딩 (Punycode)
스낵 바xn--mnchen-3ya의
北京 한국어사이트맵
인기 카테고리xn--mnchen-3ya.de
한국어 (ko)xn--fiq228c.com
카페.comxn--caf-dma.com

"xn--" 접두사

"xn--" 접두사는 ACE (ASCII 호환 인코딩) 접두사라고합니다. 레이블이 Punycode-encoded 콘텐츠를 포함 하는 DNS 해결자와 응용 프로그램에 신호. 이 접두사:

연습의 Punycode

브라우저 처리

현대 브라우저는 자동으로 Punycode를 처리 :

User types: 中文.com

Browser sends: xn--fiq228c.com (to DNS)

Browser displays: 中文.com (in address bar)

개발자 구현

JavaScript (Node.js) :
const punycode = require('punycode/');

// Encode to Punycode

const encoded = punycode.toASCII('münchen.de');

// Result: xn--mnchen-3ya.de

// Decode from Punycode

const decoded = punycode.toUnicode('xn--mnchen-3ya.de');

// Result: münchen.de

Python :
domain = 'münchen.de'

encoded = domain.encode('idna').decode('ascii')

# Result: xn--mnchen-3ya.de

URL 처리

IDN을 포함하는 URL로 일할 때:

// URL API handles Punycode automatically

const url = new URL('https://中文.com/path');

console.log(url.hostname); // xn--fiq228c.com

console.log(url.href); // https://xn--fiq228c.com/path

보안 Implications

모든 Unicode 문자를 나타내는 Punycode의 능력은 보안 위험을 만듭니다.

시각적인 Spoofing

Attackers는 합법적인 사이트와 동일하게 보이는 도메인을 등록할 수 있습니다:

аррlе.com (Cyrillic 'а' and 'р')

apple.com (Latin letters)

일부 글꼴에서 동일하게 표시하지만 다른 도메인입니다.

브라우저 보호

spoofing 전투에, 브라우저는 보호를 실행:

1. Mixed Script Detection: 도메인 믹싱 스크립트를 위한 Display Punycode

2. Confusable 탐지 : ASCII 처럼 보이는 문자를 사용하여 플래그 도메인

3. 화이트리스트 : 잘 알려진 TLD에서만 Unicode 디스플레이 허용

API에서 Punycode 작업

도메인 도구를 구축 할 때:

Always Store Punycode: 일관성과 데이터베이스 인덱스를 위해 내부적으로 ASCII 양식을 사용합니다. 모든 양식을 수락 : 사용자가 Unicode 또는 Punycode를 입력하자, 필요에 따라 변환. Display Unicode: 사용자 인터페이스에서 인간의 읽기 쉬운 형태를 보여줍니다.
function normalizeDomain(input) {

const punycode = require('punycode/');

// Convert to lowercase Punycode for internal use

return punycode.toASCII(input.toLowerCase());

}

Punycode는 대부분의 사용자에게 투명하지만 개발자가 국제 웹 응용 프로그램을 구축하는 데 필수적인 지식입니다.

이 지식을 활용하세요

DomScan의 API를 사용하여 도메인 가용성, 상태 등을 확인하세요.