다음을 통해 공유


IDN(Internationalized Do기본 이름) 처리

이 항목에서는 애플리케이션에서 국제화된 do기본 이름(IDN)을 사용하는 방법을 설명합니다. IDN은 네트워크 작업 그룹 RFC 3490: IDNA(애플리케이션의 Do기본 이름 국제화)에 의해 지정됩니다. 이 초안 표준 이전에는 IDN이 발음 없이 라틴 문자로 제한되었습니다. IDNA를 사용하면 IDN에서 키릴 자모, 아랍어 및 중국어와 같은 비 라틴어 스크립트의 문자와 함께 발음이 있는 라틴 문자를 포함할 수 있습니다. 또한 표준은 IDN을 ASCII 전용 do기본 이름에 매핑하는 규칙을 설정합니다. 따라서 IDNA 문제는 DNS(기본 이름 서버) 변경 없이 클라이언트 쪽에서 처리할 수 있습니다.

주의

RFC 3490에는 IDN 사용과 관련된 여러 가지 보안 문제가 도입되었습니다. 자세한 내용은 보안 고려 사항의 관련 섹션인 국가별 기능을 참조하세요.

 

참고 항목

IDNA는 현재 유니코드 3.2를 기반으로 합니다.

 

IDN을 처리하기 위한 NLS API 함수

NLS에는 애플리케이션이 IDN을 다른 표현으로 변환하는 데 사용할 수 있는 다음과 같은 변환 함수가 포함되어 있습니다. 이러한 함수를 사용하는 예제는 NLS: IDN(Internationalized Do기본 Name) 변환 샘플을 참조하세요.

  • IdnToAscii. IDN을 Punycode로 변환합니다.
  • IdnToNameprepUnicode. IDN을 ASCII 이름으로 변환하는 데 필요한 NamePrep 부분을 수행합니다. 이 함수는 문자열의 정식 유니코드 표현을 만듭니다.
  • IdnToUnicode. Punycode 문자열을 일반 UTF-16 문자열로 변환합니다.

NLS는 또한 IDN 기술에서 제공하는 보안 위험 중 일부를 완화하는 데 사용할 수 있는 여러 API 함수를 정의합니다. Windows Vista 이상에서는 지정된 IDN의 문자가 특정 로캘 또는 로캘과 연결된 스크립트에서 완전히 그려지는지 확인하는 데 다음 함수가 사용됩니다. 이러한 함수를 사용하는 예제는 NLS: IDN(Internationalized Do기본 Name) 완화 샘플을 참조하세요.

Windows XP 및 Windows Server 2003에서 실행되는 애플리케이션의 경우 DownlevelGetLocaleScripts, DownlevelGetStringScripts 및 DownlevelVerifyScripts 함수는 보안 위험을 완화하기 위해 위에 나열된 함수와 유사한 역할을 합니다. "Microsoft IDN(Internationalized Do기본 Name) 완화 API" 다운로드는 archive.org 사용할 수 있습니다.

유니코드 문자열 처리

IDNA는 제어 문자, PUA(Private Use Area)의 문자 등과 같은 금지된 특정 문자를 포함하는 문자열을 제외하고 유니코드 문자열을 합법적인 호스트 이름 레이블로 변환하도록 지원합니다. 애플리케이션은 여러 NLS 변환 함수와 함께 IDN_USE_STD3_ASCII_RULES 플래그를 사용하여 문자, 숫자 또는 하이픈-빼기(-) 문자 이외의 ASCII 문자가 발생하거나 문자열이 하이픈-빼기 문자로 시작되거나 끝나는 경우 함수가 강제로 실패하도록 할 수 있습니다. 이러한 문자는 항상 할 일기본 이름으로 사용할 수 없으며 초안 표준에서 다시 기본 금지되어 있습니다.

할당되지 않은 코드 포인트 처리

IDN에는 할당되지 않은 코드 포인트가 포함될 수 없습니다. 따라서 유니코드 3.2를 기준으로 문자("할당됨")와 연결되지 않은 코드 포인트는 특정 변환 함수의 IDN_ALLOW_UNASSIGNED 플래그를 통해 Punycode에 매핑할 수 있더라도 정의된 IDN 매핑을 포함하지 않습니다. RFC 3454에서 할당되지 않은 코드 포인트 목록을 찾을 수 있습니다.

주의

애플리케이션에서 할당되지 않은 코드 포인트를 Punycode로 인코딩하는 경우 결과 do기본 이름은 잘못되어야 합니다. IDNA의 이후 버전에서 이러한 이름을 합법적으로 만들거나 애플리케이션이 불법 문자를 필터링하여 법적 작업을 수행하려고 시도하는 경우 보안이 손상될 수 기본.

 

할당되지 않은 코드 지점은 프로토콜 식별자 및 명명된 엔터티에 사용되는 저장된 문자열(예: 디지털 인증서의 이름 및 DNS do기본 이름 파트에서 허용되지 않습니다. 그러나 코드 포인트는 저장된 식별자와 일치하는 데 사용되는 디지털 인증 기관 및 DNS 조회에 대한 사용자 입력 이름과 같은 쿼리 문자열에서 허용됩니다.

주의

쿼리 문자열은 할당되지 않은 코드 포인트를 사용할 수 있지만 애플리케이션에서 사용하지 않아야 합니다. 사용자가 제공한 쿼리 문자열조차도 "스푸핑" 공격의 위험이 있습니다. 이러한 유형의 공격에서 파렴치한 호스트 사이트는 타사에 중요한 정보를 제공할 수 있는 다른 사이트에 액세스하려는 사이트의 사용자를 다시 라우팅합니다. 예를 들어 들어오는 전자 메일에서 문자열을 복사하면 브라우저에서 링크를 클릭하는 것과 동일한 위험이 발생할 수 있습니다.

 

Do기본 이름을 ASCII 이름으로 변환

애플리케이션은 IdnToAscii 함수 및 특정 완화 함수를 사용하여 IDN을 ASCII로 변환할 수 있습니다.

주의

이진 표현이 매우 다른 문자열은 동일하게 비교할 수 있으므로 이 함수는 특정 보안 문제를 제기할 수 있습니다. 자세한 내용은 보안 고려 사항: 국가별 기능에서 비교 함수에 대한 설명을 참조하세요.

 

예제

NLS: IDN(Internationalized Do기본 Name) 변환 샘플은 IDN 변환 함수의 사용을 보여 줍니다. NLS: IDN(Internationalized Do기본 Name) 완화 샘플은 IDN 완화 함수의 사용을 보여 줍니다.

국가별 언어 지원 사용

보안 고려 사항: 국가별 기능