Рекомендации по внедрению в программном обеспечении поддержки доменных имен и адресов почты c использованием символов кириллицы
Рекомендации по внедрению в программном обеспечении поддержки доменных имен и адресов электронной почты c использованием символов кириллицы
Настоящий документ содержит технические рекомендации для разработчиков программного обеспечения, в котором планируется внедрение поддержки или уже реализована поддержка кириллических доменных имен и/или адресов электронной почты с использованием российских доменов верхнего уровня (в частности, .РФ, .SU, .ДЕТИ, .МОСКВА,
.РУС).
Цель документа – обеспечить разработчиков необходимыми данными для корректного внедрения принципов универсального принятия в их программные продукты с учетом специфики кириллических доменных имен и соответствующих адресов электронной почты.
Группой управления по универсальному принятию (UASG1) определены следующие базовые принципы:
- Принятие — получение доменного имени или адреса электронной почты в виде строки символов из пользовательского интерфейса, файла или API, используемого программным обеспечением;
- Проверка (или валидация) – является ли введенная информация допустимой;
- Хранение – правильно ли она сохраняется и извлекается из базы данных (или файла с данными);
- Обработка – в правильном ли виде доменные имена или адреса электронной почты используются программным обеспечением для решения своих непосредственных задач;
- Отображение – правильно ли отображаются в пользовательском интерфейсе программного обеспечения доменные имена и адреса электронной почты.
Настоящий документ разработан в соответствии с указанными пятью принципами универсального принятия и включают в себя следующие рекомендации:
Для поддержки доменных имен с символами кириллицы
- Принятие доменного имени
- Передача программному обеспечению доменного имени как пользователем с помощью GUI, так и через API, должна быть возможна как в формате U-метки2 (Unicode), так и в формате A-метки (Punycode).
- Если передача пользователем доменного имени осуществляется с помощью GUI в формате A-метки3, рекомендуется преобразовать его в U-метку средствами предобработки данных.
- Проверка доменного имени
- При регистрации доменных имен с символами кириллицы рекомендуется соблюдать следующие требования:
- Любое интернационализированное доменное имя должно соответствовать положениям стандарта IDNA 2008.
- Перед проведением проверок доменного имени рекомендуется привести доменное имя к нижнему регистру и провести нормализацию NFC4.
- Доменное имя может содержать кириллические символы, а также дефис (-) и цифры (0-9). Перечень допустимых символов должен быть взят из IDN таблицы соответствующего ДВУ или, при отсутствии таковой, из правил Регистрации соответствующего ДВУ;
- Использовать символы, отличные от перечисленных в пункте 2.1.3., в одной метке доменного имени рекомендуется запрещать.
- Рекомендуется также предпринимать усилия для исключения возможности омоглифических атак (выдачи доменного имени за другое на основе внешней схожести начертания символов);
- Доменное имя может начинаться и заканчиваться цифрой или буквой, не может дефисом. Дефис в U-метке не может содержаться одновременно в 3 и 4 позициях;
- Перед проверкой длины доменное имя требуется преобразовать из U-метки в A-метку;
- Доменное имя может иметь длину домена второго и далее уровней от 1 до 63 октетов. Длину интернационализированного доменного имени в символах необходимо измерять в A-метке;
- Общая длина доменного имени не может превышать 255 символов в А-метке.
- Для существующего доменного имени рекомендуется проверять его делегирование при помощи DNS-запроса.
В отдельных случаях возможно проведение дополнительной проверки существования домена верхнего уровня, для которой рекомендуется использовать регулярно обновляемый список доменов верхнего уровня, предоставляемый IANA5.
- При регистрации доменных имен с символами кириллицы рекомендуется соблюдать следующие требования:
- Хранение доменного имени
- Доменное имя должно храниться в БД или в файлах в кодировке Юникод (UTF-8).
- Доменное имя может храниться в виде A-метки в дополнение к U-метке, при этом необходимо проверять соответствие обеих меток при изменении одной из них.
- Обработка доменного имени
- Любые операции с доменными именами должны производиться в кодировке Юникод(UTF-8).
- При поиске среди набора данных, включающего доменные имена, рекомендуется обеспечивать возможность нахождения элементов по запросу, где каждая метка доменного имена может быть указана как в форме A-метки, так и в форме U-метки.
- Отображение доменного имени
- Доменное имя должно отображаться в графическом интерфейсе программного обеспечения в кодировке Юникод (UTF-8).
- Доменное имя может отображаться в виде А-метки только в том случае, когда оно идет в дополнение к соответствующему доменному имени в виде U-метки.
- При отображении ошибок, связанных с доменным именем, рекомендуется выделять соответствующую метку доменного имени, с которой связана ошибка.
Для поддержки адресов электронной почты с символами кириллицы
- Принятие адреса электронной почты
- Доменная часть адреса электронной почты должна передаваться в соответствии с п. 1 раздела I.
- Локальная часть адреса электронной почты должна передаваться только в кодировке Юникод (UTF-8).
- Проверка адреса электронной почты
- Доменная часть6 адреса электронной почты должна проверяться в соответствии с п. 2 раздела I.
- Локальная часть7 интернационализированного адреса электронной почты должна соответствовать требованиям стандарта EAI.
- При создании (регистрации) нового адреса электронной почты в локальной части рекомендуется соблюдать следующие принятые нормы:
- Перед проведением проверок рекомендуется привести локальную часть адреса электронной почты к нижнему регистру и провести нормализацию по форме NFC. При необходимости возможно использование нормализации по форме NFKC8.
- Локальная часть адреса электронной почты может содержать латинские символы (a-z), кириллические символы (а-я), цифры (от 0 до 9);
- Смешивать кириллические и латинские символы, указанные в пункте 2.3.2, в локальной части адреса электронной почты рекомендуется запрещать;
- В локальной части адреса электронной почты не рекомендуется использовать специальные символы, за исключением точки (.), нижнего подчеркивания (_) и дефиса (-). В отдельных случаях допустимо использовать специальный символ плюс (+).
- Локальную часть адреса электронной почты не рекомендуется начинать и заканчивать любым специальным символом или иметь в ней два специальных символа подряд.
- Длина локальной части адреса электронной почты может быть от 1 до 64 символов.
- Хранение адреса электронной почты
- Доменная часть адреса электронной почты должна храниться в соответствии с п. 3 раздела I.
- Локальная часть адреса электронной почты должна храниться в кодировке Юникод (UTF-8).
- Обработка адреса электронной почты
- Любые операции с адресами электронной почты рекомендуется производить в кодировке Юникод (UTF-8).
- При поиске среди набора данных, включающего адреса электронной почты, рекомендуется обеспечивать возможность нахождения элементов по запросу, где любая метка в доменной части может быть указана как в форме A-метки, так и в форме U-метки.
- Отображение адреса электронной почты
- Доменная часть адреса электронной почты должна отображаться в соответствии с п. 5 раздела I.
- Локальная часть адреса электронной почты должна отображаться в кодировке Юникод (UTF-8).
- При отображении ошибок, связанных с адресом электронной почты, рекомендуется выделять локальную часть адреса, если ошибка в ней, или соответствующую метку доменного имени, если ошибка в доменной части.
Список использованных источников
Настоящий документ разработан на основе приведенных ниже материалов:
- Introduction to Universal Acceptance,
https://uasg.tech/wp-content/uploads/documents/UASG007-en-digital.pdf - Email Address Internationalization – Technical Perspective,
https://uasg.tech/wp-content/uploads/documents/UASG019B-en-digital.pdf - Universal Acceptance Readiness Framework,
https://uasg.tech/wp-content/uploads/documents/UASG026-en-digital.pdf - RFC 5321 - Simple Mail Transfer Protocol,
https://tools.ietf.org/html/rfc5321 - RFC 5322 - Internet Message Format,
https://tools.ietf.org/html/rfc5322 - RFC 1035 - Domain Names - Implementation And Specification,
https://tools.ietf.org/html/rfc1035 - RFC 3492 - Punycode: A Bootstring encoding of Unicode for Internationalized Domain Names in Applications,
https://www.ietf.org/rfc/rfc3492.txt
- Стандарт Internationalized Domain Names for Applications
https://www.ietf.org/rfc/rfc5890.txt
https://www.ietf.org/rfc/rfc5891.txt
https://www.ietf.org/rfc/rfc5892.txt
https://www.ietf.org/rfc/rfc5893.txt
https://www.ietf.org/rfc/rfc5894.txt
https://www.ietf.org/rfc/rfc5895.txt - Стандарт EAI, интернационализации электронной почты https://tools.ietf.org/html/rfc6530
https://tools.ietf.org/html/rfc6531 https://tools.ietf.org/html/rfc6532 https://tools.ietf.org/html/rfc6533 - Юникод консорциум, https://home.unicode.org/
- Группа управления по универсальному принятию (Universal Acceptance Steering Group, UASG), https://uasg.tech/
- Поддерживаю.РФ - проект развития экосистемы поддержки доменных имен и почтовых адресов на национальных языках,
https://поддерживаю.рф - Формы нормализации Юникод,
http://www.unicode.org/reports/tr15/ - Блоки символов Юникод,
https://www.unicode.org/charts/ - IDN таблицы кириллических доменов верхнего уровня
.РФ - https://www.iana.org/domains/idn-tables/tables/xn--p1ai_cyrl_1.0.txt
.ДЕТИ - https://www.iana.org/domains/idn-tables/tables/xn--d1acj3b_ru_1.0.txt
.МОСКВА - https://www.iana.org/domains/idn-tables/tables/xn--80adxhks_ru_1.0.txt
.РУС - https://www.iana.org/domains/idn-tables/tables/xn--p1acf_cyrl_1.0.txt