Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Det här avsnittet beskriver hur du kan arbeta med internationaliserade domännamn (IDN) i dina program. IDN specificeras av nätverksarbetsgruppen RFC 3490: Internationalisering av domännamn i applikationer (IDNA). Innan det här utkastet till standard var IDN:er begränsade till latinska tecken utan diakritiska tecken. IDNA tillåter IDN:er att inkludera latinska tecken med diakritiska tecken, tillsammans med tecken från icke-latinska skript, till exempel kyrilliska, arabiska och kinesiska. Standarden upprättar också regler för mappning av IDN:er till enbart ASCII-domännamn. Därför kan IDNA-problem hanteras på klientsidan, utan att det krävs några DNS-ändringar (Domain Name Server).
Försiktighet
RFC 3490 introducerar ett antal säkerhetsproblem som rör användning av IDN. Mer information finns i avsnittet Säkerhetsöverväganden: Internationella funktioner.
Not
IDNA baseras för närvarande på Unicode 3.2.
NLS API-funktioner för hanteringen av IDN:er
NLS innehåller följande konverteringsfunktioner som ditt program kan använda för att konvertera ett IDN till olika representationer. Ett exempel på användningen av dessa funktioner finns i NLS: Internationalized Domain Name (IDN) Conversion Sample.
- IdnToAscii. Konverterar ett IDN till Punycode.
- IdnToNameprepUnicode. Utför NamePrep-delen av konverteringen av ett IDN till ett ASCII-namn. Den här funktionen skapar en kanonisk Unicode-representation av en sträng.
- IdnToUnicode. Konverterar en Punycode-sträng till en vanlig UTF-16-sträng.
NLS definierar också flera API-funktioner som kan användas för att minska vissa av de säkerhetsrisker som IDN-tekniken medför. I Windows Vista och senare används följande funktioner för att kontrollera att tecknen i ett visst IDN helt hämtas från skripten som är associerade med ett visst språk eller nationella inställningar. Ett exempel på användningen av dessa funktioner finns i NLS: Internationalized Domain Name (IDN) Mitigation Sample.
- GetStringScripts. Innehåller en lista över skript som används i en viss sträng.
- GetLocaleInfo, GetLocaleInfoEx. Hämta lokalinformation. Att använda funktionerna med LCType inställt på LOCALE_SSCRIPTS ger en lista över skript som normalt används för en viss lokalitet.
- VerifyScripts. Jämför listor med skript. För att verifiera mot flera språk kan programmet göra flera anrop till GetLocaleInfo eller GetLocaleInfoEx och VerifyScripts.
För program som körs på Windows XP och Windows Server 2003 spelar funktionerna DownlevelGetLocaleScripts, DownlevelGetStringScriptsoch DownlevelVerifyScripts en liknande roll som de funktioner som anges ovan för att minska säkerhetsrisken. "Microsoft Internationalized Domain Name (IDN) Mitigation API:er" hämtas från archive.org.
Hantera Unicode-strängar
IDNA stöder omvandlingen av Unicode-strängar till legitima värdnamnsetiketter, med undantag för strängar som innehåller vissa förbjudna tecken, till exempel kontrolltecken, tecken från det privata användningsområdet (PUA) och liknande. Ditt program kan använda flaggan IDN_USE_STD3_ASCII_RULES med flera NLS-konverteringsfunktioner för att tvinga funktionerna att misslyckas om de stöter på andra ASCII-tecken än bokstäver, siffror eller bindestreck minustecken (-), eller om en sträng börjar eller slutar med bindestreck minus-tecknet. Dessa tecken har alltid förbjudits att användas i domännamn och förblir förbjudna i utkastet till standard.
Hantera otilldelade kodpunkter
IDN:er får inte innehålla otilldelade kodpunkter. Därför har kodpunkter som inte är associerade med ett tecken ("tilldelade") från och med Unicode 3.2 inte definierade IDN-mappningar, även om flaggan IDN_ALLOW_UNASSIGNED i vissa konverteringsfunktioner gör att de kan mappas till Punycode. Du hittar en lista över otilldelade kodpunkter i RFC 3454.
Försiktighet
Om ditt program kodar otilldelade kodpunkter som Punycode, bör de resulterande domännamnen vara olagliga. Säkerheten kan äventyras om en senare version av IDNA gör dessa namn lagliga eller om programmet filtrerar bort de otillåtna tecknen för att försöka skapa ett juridiskt domännamn.
Otilldelade kodpunkter tillåts inte i de lagrade strängar som används i protokollidentifierare och namngivna entiteter, till exempel namn i digitala certifikat och DNS-domännamnsdelar. Kodpunkterna tillåts dock i frågesträngar, till exempel användarnamn för digitala certifikatutfärdare och DNS-sökningar som används för att matcha mot lagrade identifierare.
Försiktighet
Även om frågesträngar kan använda otilldelade kodpunkter bör du inte använda dem i dina program. Även en frågesträng som tillhandahålls av användaren innebär en risk för en "förfalskningsattack". I den här typen av angrepp omdirigerar den skrupelfria värdwebbplatsen användare från den webbplats som de tänker komma åt till en annan webbplats som kan ge känslig information till en tredje part. Till exempel kan kopiering av en sträng från ett inkommande e-postmeddelande innebära samma risker som att klicka på en länk i en webbläsare.
Konvertera domännamn till ASCII-namn
Ditt program kan använda funktionen IdnToAscii och vissa åtgärdsfunktioner för att konvertera IDN till ASCII.
Försiktighet
Eftersom strängar med mycket olika binära representationer kan jämföras som identiska kan den här funktionen ge upphov till vissa säkerhetsproblem. Mer information finns i diskussionen om jämförelsefunktioner i Säkerhetsöverväganden: Internationella funktioner.
Exempel
NLS: Internationalized Domain Name (IDN) Conversion Sample visar användningen av IDN-konverteringsfunktionerna. NLS: Internationalized Domain Name (IDN) Mitigation Sample visar användningen av IDN-mildringsfunktionerna.
Relaterade ämnen