Was sind gültige Zeichen für eine DNS-Zone-Datei und wie kann ich Benutzereingaben sanieren?
Frage
Ich arbeite an einer Schnittstelle unserer Kunden zu ermöglichen, ihre DNS auf ihrem eigenen zu aktualisieren.
Ich habe 2 Fragen:
- Was gilt eine gültige Host- und Zielsätze ausmacht? (A, CNAME, MX, TXT) das heißt, wenn der Benutzer gibt ........ für den Host und Ziel Der DNS-Server so nicht.
- Sie haben ein regex ich verwenden kann, um Benutzereingaben zu sanieren?
BTW ist es BIND9 DNS und C # Web-App.
Danke,
Kyle
Lösung
Domain Name Labels können technisch jedes Oktett Wert enthalten, aber in der Regel sie nur enthalten alphanumerics und den Bindestrich und Unterstrichen.
Das kommt von Empfehlungen in Abschnitt 2.3.1 von RFC 1035 :
Die Etiketten müssen die Regeln für ARPANET Host-Namen. Sie müssen beginnen mit einem Brief, mit einem Brief beenden oder Ziffer und haben als Innen Zeichen nur Buchstaben, Ziffern und Bindestrich. Darüber hinaus gibt es einige Einschränkungen auf die Länge. Die Etiketten müssen 63 sein Zeichen oder weniger.
Das Unterstreichungszeichen ist ein neuere hinaus, typischerweise in dem Etikettteil von SRV
Aufzeichnungen verwendet.
Sie können auch den „.
“ Charakter erlauben, wenn Benutzer geht zu lassen, ihre eigene Sub-Domains erstellen.
Die Werte , die möglich sind:
-
A
Rekord - muss eine gepunktete Quad IP-Adresse -
CNAME
Rekord - müssen einige andere rechtliche Label sein
-
MX
Rekord - 16-Bit-Integer-Prioritätsfeld und ein Rechtshostname. NB: einige Leute in den Etiketten, die sich nur auf einenCNAME
Datensatz verweisen. Dies ist verpönt. -
TXT
Rekord - alles, was Sie mögen
Beachten Sie, dass in jedem Fall, wenn Sie eines des Zeichens nicht erlauben, in dem normalen Satz müßten sie entkommen sein, wenn sie in einer BIND-Format Zonendatei gespeichert werden.
Andere Tipps
Vergessen Sie nicht, AAAA, die IPv6-Adressen (denken Sie daran, nur noch zwei Jahre, bevor wir laufen von IPv4-Adressen ...).
Für das Recht Namen, lesen Sie RFC 1123, Abschnitt 2.1. Domäne Namen sein können alles , Host Namen haben eine viel strengere Syntax (siehe RFC 1123).
Die Antwort verwendet, um einfach zu sein, aber nicht mehr.
Sie können fast jedes Unicode-Zeichen verwenden, aber sie sollten durch eine Normalisierung gehen, und Codierungsprozess.
Siehe RFC 3490 (IDNA), RFC 3454 (Stringprep), RFC 3491 (Nameprep), RFC 3492 (Punycode)
Oder gehen Sie mit Wikipedia für das große Bild ( http://en.wikipedia.org/wiki/ Internationalized_domain_name ).