Рекомендации по внедрению в программном обеспечении поддержки доменных имен и адресов почты c использованием символов кириллицы

Материал из вики.поддерживаю.рф
(разн.) ← Предыдущая версия | Текущая версия (разн.) | Следующая версия → (разн.)
Перейти к навигации Перейти к поиску

Рекомендации по внедрению в программном обеспечении поддержки доменных имен и адресов электронной почты c использованием символов кириллицы

Настоящий документ содержит технические рекомендации для разработчиков программного обеспечения, в котором планируется внедрение поддержки или уже реализована поддержка кириллических доменных имен и/или адресов электронной почты с использованием российских доменов верхнего уровня (в частности, .РФ, .SU, .ДЕТИ, .МОСКВА,

.РУС).

Цель документа – обеспечить разработчиков необходимыми данными для корректного внедрения принципов универсального принятия в их программные продукты с учетом специфики кириллических доменных имен и соответствующих адресов электронной почты.

Группой управления по универсальному принятию (UASG1) определены следующие базовые принципы:

  1. Принятие — получение доменного имени или адреса электронной почты в виде строки символов из пользовательского интерфейса, файла или API, используемого программным обеспечением;
  2. Проверка (или валидация) – является ли введенная информация допустимой;
  3. Хранение – правильно ли она сохраняется и извлекается из базы данных (или файла с данными);
  4. Обработка – в правильном ли виде доменные имена или адреса электронной почты используются программным обеспечением для решения своих непосредственных задач;
  5. Отображение – правильно ли отображаются в пользовательском интерфейсе программного обеспечения доменные имена и адреса электронной почты.

Настоящий документ разработан в соответствии с указанными пятью принципами универсального принятия и включают в себя следующие рекомендации:

Для поддержки доменных имен с символами кириллицы

  1. Принятие доменного имени
    1. Передача программному обеспечению доменного имени как пользователем с помощью GUI, так и через API, должна быть возможна как в формате U-метки2 (Unicode), так и в формате A-метки (Punycode).
    2. Если передача пользователем доменного имени осуществляется с помощью GUI в формате A-метки3, рекомендуется преобразовать его в U-метку средствами предобработки данных.
  2. Проверка доменного имени
    1. При регистрации доменных имен с символами кириллицы рекомендуется соблюдать следующие требования:
      1. Любое интернационализированное доменное имя должно соответствовать положениям стандарта IDNA 2008.
      2. Перед проведением проверок доменного имени рекомендуется привести доменное имя к нижнему регистру и провести нормализацию NFC4.
      3. Доменное имя может содержать кириллические символы, а также дефис (-) и цифры (0-9). Перечень допустимых символов должен быть взят из IDN таблицы соответствующего ДВУ или, при отсутствии таковой, из правил Регистрации соответствующего ДВУ;
      4. Использовать символы, отличные от перечисленных в пункте 2.1.3., в одной метке доменного имени рекомендуется запрещать.
      5. Рекомендуется также предпринимать усилия для исключения возможности омоглифических атак (выдачи доменного имени за другое на основе внешней схожести начертания символов);
      6. Доменное имя может начинаться и заканчиваться цифрой или буквой, не может дефисом. Дефис в U-метке не может содержаться одновременно в 3 и 4 позициях;
      7. Перед проверкой длины доменное имя требуется преобразовать из U-метки в A-метку;
      8. Доменное имя может иметь длину домена второго и далее уровней от 1 до 63 октетов. Длину интернационализированного доменного имени в символах необходимо измерять в A-метке;
      9. Общая длина доменного имени не может превышать 255 символов в А-метке.
    2. Для существующего доменного имени рекомендуется проверять его делегирование при помощи DNS-запроса.
      В отдельных случаях возможно проведение дополнительной проверки существования домена верхнего уровня, для которой рекомендуется использовать регулярно обновляемый список доменов верхнего уровня, предоставляемый IANA5.
  3. Хранение доменного имени
    1. Доменное имя должно храниться в БД или в файлах в кодировке Юникод (UTF-8).
    2. Доменное имя может храниться в виде A-метки в дополнение к U-метке, при этом необходимо проверять соответствие обеих меток при изменении одной из них.
  4. Обработка доменного имени
    1. Любые операции с доменными именами должны производиться в кодировке Юникод(UTF-8).
    2. При поиске среди набора данных, включающего доменные имена, рекомендуется обеспечивать возможность нахождения элементов по запросу, где каждая метка доменного имена может быть указана как в форме A-метки, так и в форме U-метки.
  5. Отображение доменного имени
    1. Доменное имя должно отображаться в графическом интерфейсе программного обеспечения в кодировке Юникод (UTF-8).
    2. Доменное имя может отображаться в виде А-метки только в том случае, когда оно идет в дополнение к соответствующему доменному имени в виде U-метки.
    3. При отображении ошибок, связанных с доменным именем, рекомендуется выделять соответствующую метку доменного имени, с которой связана ошибка.

Для поддержки адресов электронной почты с символами кириллицы

  1. Принятие адреса электронной почты
    1. Доменная часть адреса электронной почты должна передаваться в соответствии с п. 1 раздела I.
    2. Локальная часть адреса электронной почты должна передаваться только в кодировке Юникод (UTF-8).
  2. Проверка адреса электронной почты
    1. Доменная часть6 адреса электронной почты должна проверяться в соответствии с п. 2 раздела I.
    2. Локальная часть7 интернационализированного адреса электронной почты должна соответствовать требованиям стандарта EAI.
    3. При создании (регистрации) нового адреса электронной почты в локальной части рекомендуется соблюдать следующие принятые нормы:
      1. Перед проведением проверок рекомендуется привести локальную часть адреса электронной почты к нижнему регистру и провести нормализацию по форме NFC. При необходимости возможно использование нормализации по форме NFKC8.
      2. Локальная часть адреса электронной почты может содержать латинские символы (a-z), кириллические символы (а-я), цифры (от 0 до 9);
      3. Смешивать кириллические и латинские символы, указанные в пункте 2.3.2, в локальной части адреса электронной почты рекомендуется запрещать;
      4. В локальной части адреса электронной почты не рекомендуется использовать специальные символы, за исключением точки (.), нижнего подчеркивания (_) и дефиса (-). В отдельных случаях допустимо использовать специальный символ плюс (+).
      5. Локальную часть адреса электронной почты не рекомендуется начинать и заканчивать любым специальным символом или иметь в ней два специальных символа подряд.
      6. Длина локальной части адреса электронной почты может быть от 1 до 64 символов.
  1. Хранение адреса электронной почты
    1. Доменная часть адреса электронной почты должна храниться в соответствии с п. 3 раздела I.
    2. Локальная часть адреса электронной почты должна храниться в кодировке Юникод (UTF-8).
  2. Обработка адреса электронной почты
    1. Любые операции с адресами электронной почты рекомендуется производить в кодировке Юникод (UTF-8).
    2. При поиске среди набора данных, включающего адреса электронной почты, рекомендуется обеспечивать возможность нахождения элементов по запросу, где любая метка в доменной части может быть указана как в форме A-метки, так и в форме U-метки.
  3. Отображение адреса электронной почты
    1. Доменная часть адреса электронной почты должна отображаться в соответствии с п. 5 раздела I.
    2. Локальная часть адреса электронной почты должна отображаться в кодировке Юникод (UTF-8).
    3. При отображении ошибок, связанных с адресом электронной почты, рекомендуется выделять локальную часть адреса, если ошибка в ней, или соответствующую метку доменного имени, если ошибка в доменной части.

Список использованных источников

Настоящий документ разработан на основе приведенных ниже материалов:

https://www.ietf.org/rfc/rfc3492.txt

.РФ - 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

.SU - https://www.tcinet.ru/su/ver2_unicode.php