Каковы допустимые символы для файла зоны DNS и как я могу дезинфицировать пользовательский ввод? - PullRequest
0 голосов
/ 04 февраля 2009

Я работаю над интерфейсом, позволяющим нашим клиентам самостоятельно обновлять свои DNS.

У меня есть 2 вопроса:

  1. Что представляет собой действительный хост и целевые записи? (A, CNAME, MX, TXT), т.е. если пользователь вводит ........ для хоста и целевого DNS-сервера, это не понравится.
  2. Есть ли регулярное выражение, которое я могу использовать для очистки пользовательского ввода?

Кстати, это BIND9 DNS и C # веб-приложение.

Спасибо

Кайл

Ответы [ 3 ]

2 голосов
/ 06 февраля 2009

Доменное имя метки технически могут содержать любое значение октета, но обычно содержат только буквенно-цифровые символы, дефис и символы подчеркивания.

Это следует из рекомендаций в разделе 2.3.1 RFC 1035 :

Этикетки должны соответствовать правилам ARPANET имена хостов. Они должны начать буквой, конец буквой или цифра, и иметь в качестве внутренних символов только буквы, цифры и дефис. Есть также некоторые ограничения на длина. Метки должны быть 63 символов или меньше.

Символ подчеркивания является более поздним дополнением, обычно используемым в части метки SRV записей.

Вы также можете разрешить использование символа ".", если собираетесь разрешить пользователям создавать свои собственные субдомены.

Возможные значения :

  • A запись - должен быть IP-адрес с точками в квадрате
  • CNAME запись - должен быть какой-то другой легальный лейбл
  • MX запись - 16-битное целочисленное поле приоритета и допустимое имя хоста. NB: некоторые люди помещают ярлыки, которые сами указывают только на запись CNAME. Это осуждается.
  • TXT запись - все что угодно!

Обратите внимание, что в любом случае, если вы разрешите любой из символов, не входящих в обычный набор, их нужно будет экранировать, если они хранятся в файле зоны формата BIND.

0 голосов
/ 09 февраля 2009

Раньше ответ был легким, но не больше.

Вы можете использовать практически любые символы Юникода, но они должны пройти нормализацию, и процесс кодирования.

См. RFC 3490 (IDNA), RFC 3454 (Stringprep), RFC 3491 (Nameprep), RFC 3492 (Punycode)

Или идите с Википедией за большую картинку (http://en.wikipedia.org/wiki/Internationalized_domain_name).

0 голосов
/ 09 февраля 2009

Не забывайте AAAA, адреса IPv6 (помните, осталось только два года до того, как у нас закончатся адреса IPv4 ...).

Для юридических имен читайте RFC 1123, раздел 2.1. имена доменов могут быть что угодно , имена хостов имеют более строгий синтаксис (см. RFC 1123).

...