Behandeln von internationalisierten Domänennamen (IDNs)
In diesem Thema wird beschrieben, wie Sie mit internationalisierten Domänennamen (IDNs) in Ihren Anwendungen arbeiten können. IDNs werden von der Netzwerkarbeitsgruppe RFC 3490 angegeben: Internationalisieren von Domänennamen in Anwendungen (IDNA). Vor diesem Entwurf wurden IDNs ohne diakritische Zeichen auf lateinische Zeichen beschränkt. IDNA ermöglicht IDNs, lateinische Zeichen mit diakritischen Zeichen zusammen mit Zeichen aus nicht lateinischen Schriften wie Kyrillisch, Arabisch und Chinesisch einzuschließen. Der Standard richtet auch Regeln für die Zuordnung von IDNs zu NUR ASCII-Domänennamen ein. Daher können IDNA-Probleme auf clientseitiger Seite behandelt werden, ohne dass Änderungen am Domain Name Server (DNS) erforderlich sind.
Achtung
RFC 3490 führt eine Reihe von Sicherheitsproblemen im Zusammenhang mit der Verwendung von IDNs ein. Weitere Informationen finden Sie im zugehörigen Abschnitt zu Sicherheitsüberlegungen: Internationale Funktionen.
Hinweis
IDNA basiert derzeit auf Unicode 3.2.
NLS-API-Funktionen für die Behandlung von IDNs
NLS enthält die folgenden Konvertierungsfunktionen, die Ihre Anwendung verwenden kann, um einen IDN in verschiedene Darstellungen zu konvertieren. Ein Beispiel für die Verwendung dieser Funktionen finden Sie unter NLS: Internationaler Domänenname (IDN) Konvertierungsbeispiel.
- IdnToAscii. Konvertiert einen IDN in Punycode.
- IdnToNameprepUnicode. Führt den NamePrep-Teil der Konvertierung eines IDN in einen ASCII-Namen aus. Diese Funktion erstellt eine kanonische Unicode-Darstellung einer Zeichenfolge.
- IdnToUnicode. Konvertiert eine Punycode-Zeichenfolge in eine normale UTF-16-Zeichenfolge.
NLS definiert auch mehrere API-Funktionen, die verwendet werden können, um einige der Sicherheitsrisiken zu minimieren, die von der IDN-Technologie dargestellt werden. Unter Windows Vista und höher werden die folgenden Funktionen verwendet, um zu überprüfen, ob die Zeichen in einem bestimmten IDN vollständig aus den Skripts gezeichnet werden, die einem bestimmten Gebietsschema oder Gebietsschema zugeordnet sind. Ein Beispiel für die Verwendung dieser Funktionen finden Sie unter NLS: Internationaler Domänenname (IDN) Ausgleichsbeispiel.
- GetStringScripts. Stellt eine Liste von Skripts bereit, die in einer bestimmten Zeichenfolge verwendet werden.
- GetLocaleInfo, GetLocaleInfoEx. Abrufen von Gebietsschemainformationen. Die Verwendung der Funktionen mit LCType auf LOCALE_SSCRIPTS stellt eine Liste der Skripts bereit, die normalerweise für ein bestimmtes Gebietsschema verwendet werden.
- VerifyScripts. Vergleicht Listen von Skripts. Um mehrere Gebietsschemas zu überprüfen, kann die Anwendung mehrere Aufrufe an GetLocaleInfo oder GetLocaleInfoEx und VerifyScripts durchführen.
Für Anwendungen, die unter Windows XP und Windows Server 2003 ausgeführt werden, spielen die Funktionen DownlevelGetLocaleScripts, DownlevelGetStringScripts undDownlevelVerifyScripts eine ähnliche Rolle wie die oben aufgeführten Funktionen beim Verringern des Sicherheitsrisikos. Die „Internationalen Domänennamen (IDN)-Ausgleichs-APIs von Microsoft“ werden von archive.org heruntergeladen.
Behandeln von Unicode-Zeichenfolgen
IDNA unterstützt die Transformation von Unicode-Zeichenfolgen in legitime Hostnamensbezeichnungen, mit Ausnahme von Zeichenfolgen, die bestimmte unzulässige Zeichen enthalten, z. B. Steuerzeichen, Zeichen aus dem privaten Verwendungsbereich (PUA) und Ähnliches. Ihre Anwendung kann die IDN_USE_STD3_ASCII_RULES-Kennzeichnung mit mehreren NLS-Konvertierungsfunktionen verwenden, um zu erzwingen, dass die Funktionen fehlschlagen, wenn sie auf andere ASCII-Zeichen als Buchstaben, Zahlen oder das Bindestrich-Minuszeichen (-) stoßen, oder wenn eine Zeichenfolge mit dem Bindestrich-Minuszeichen beginnt oder endet. Diese Zeichen durften schon immer nicht in Domänennamen verwendet werden und bleiben auch im Standardentwurf verboten.
Behandeln nicht zugewiesener Codepunkte
IDNs dürfen keine nicht zugewiesenen Codepunkte enthalten. Daher haben Codepunkte, die nicht einem Zeichen („zugewiesen“) als Unicode 3.2 zugeordnet sind, keine IDN-Zuordnungen definiert, auch wenn das IDN_ALLOW_UNASSIGNED-Flag in bestimmten Konvertierungsfunktionen ihnen die Zuordnung zu Punycode ermöglicht. Eine Liste nicht zugewiesener Codepunkte finden Sie in RFC 3454.
Achtung
Wenn Ihre Anwendung nicht zugewiesene Codepunkte als Punycode codiert, sollten die resultierenden Domänennamen illegal sein. Die Sicherheit kann beeinträchtigt werden, wenn eine spätere Version von IDNA diese Namen legalisiert oder wenn die Anwendung die illegalen Zeichen herausfiltert, um einen legalen Domänennamen zu erstellen.
Nicht zugewiesene Codepunkte sind in den gespeicherten Zeichenfolgen, die in Protokollbezeichnern und benannten Entitäten verwendet werden, wie Namen in digitalen Zertifikaten und DNS-Domänennamenteilen, nicht zulässig. Die Codepunkte sind jedoch in Abfragezeichenfolgen zulässig, z. B. von Benutzern eingegebene Namen für digitale Zertifizierungsstellen und DNS-Nachschlagevorgänge, die zum Abgleichen mit gespeicherten IDs verwendet werden.
Achtung
Obwohl Abfragezeichenfolgen nicht zugewiesene Codepunkte verwenden können, sollten Sie diese nicht in Ihren Anwendungen verwenden. Selbst eine benutzerseitig bereitgestellte Abfragezeichenfolge stellt ein Risiko eines „Spoofing“-Angriffs dar. In dieser Art von Angriff umgeleitet die skrupellose Hostwebsite Benutzer von der Website, auf die sie zugreifen möchten, auf eine andere Website, die möglicherweise vertrauliche Informationen an einen Drittanbieter bereitstellt. Beispielsweise kann das Kopieren einer Zeichenfolge aus einer eingehenden E-Mail die gleichen Risiken darstellen wie das Klicken auf einen Link in einem Browser.
Konvertieren von Domänennamen in ASCII-Namen
Ihre Anwendung kann die IdnToAscii-Funktion und bestimmte Ausgleichsfunktionen verwenden, um IDNs in ASCII zu konvertieren.
Achtung
Da Zeichenfolgen mit sehr unterschiedlichen binären Darstellungen als identisch vergleichen können, kann diese Funktion bestimmte Sicherheitsbedenken aufwerfen. Weitere Informationen finden Sie in der Erläuterung von Vergleichsfunktionen in Sicherheitsüberlegungen: Internationale Funktionen.
Beispiele
NLS: Internationaler Domänenname (IDN)-Konvertierungsbeispiel veranschaulicht die Verwendung der IDN-Konvertierungsfunktionen. NLS: Internationaler Domänenname (IDN)-Ausgleichsbeispiel veranschaulicht die Verwendung der IDN-Ausgleichsfunktionen.
Zugehörige Themen