2009-02-04 36 views
0

我正在開發一個接口,允許我們的客戶自己更新他們的DNS。什麼是DNS區域文件的有效字符,以及如何清理用戶輸入?

我有2個問題:

  1. 什麼構成有效的一個有效的主機和目標記錄? (A,CNAME,MX,TXT),即如果用戶爲主機輸入........並且目標DNS服務器不會那樣。
  2. 有沒有我可以用來消毒用戶輸入的正則表達式?

BTW它是BIND9 DNS和C#的Web應用程序。

感謝,

凱爾

+0

重新清理用戶輸入 - 查看本文:http://abdullin.com/journal/2009/1/29/ddd-and-rule-driven-ui-validation-in-net.html – 2009-02-09 09:28:57

回答

2

域名標籤在技術上可以包含任何字節的值,但通常他們只包含字母,數字和連字符和下劃線字符。

這來源於建議,部分RFC 1035 2.3.1:

標籤必須遵循 ARPANET主機名規則。他們必須用一個字母開始 ,以字母或 數字結尾,並且只有字母,數字和連字符作爲內部字符 。 還有一些限制 的長度。標籤必須是63或更少的字符。

下劃線字符是更新的添加,通常用於SRV記錄的標籤部分。

如果您要讓用戶創建自己的子域名,您還可以允許「.」字符。

是可能的是:

  • A記錄 - 必須是一個點分四組IP地址
  • CNAME記錄 - 必須有一些其他的法律標籤
  • MX記錄 - 16位整數優先級字段和合法的主機名。注意:有些人輸入的標籤本身只能指向CNAME記錄。這是皺眉。
  • TXT記錄 - 任何你喜歡的東西!

請注意,在任何情況下,如果您允許任何字符不在普通集中,那麼如果它們存儲在BIND格式的區域文件中,則需要將其轉義。

+0

規則RFC 1035已經由RFC 1123進行了更新。從數字開始,現在完全正常。 – bortzmeyer 2009-02-09 07:59:37

0

不要忘了AAAA,IPv6地址(記住,在我們用完IPv4地址之前還剩下兩年......)。

有關法定名稱,請閱讀RFC 1123的第2.1節。域名名稱可以是任何東西,主機名稱具有更嚴格的語法(請參閱RFC 1123)。

0

答案曾經很容易,但現在不再了。

您幾乎可以使用任何Unicode字符,但它們應該通過規範化和 編碼過程。

參見RFC 3490(IDNA),RFC 3454(STRINGPREP),RFC 3491(NAMEPREP),RFC 3492(Punycode碼)

或者維基百科去大畫面(http://en.wikipedia.org/wiki/Internationalized_domain_name)。

相關問題