2014-05-07 47 views
0

我正在嘗試在xml文件中輸出RegEx作爲屬性。RegEx應該作爲CDATA還是作爲屬性存儲在XML中?

的問題是,在XML輸出生成的正則表達式比一個不同的我在數據庫:

-- database 
[a-z0-9!#$%&'*+\/=?^_`{|}~-]+(\.[a-z0-9!#$%&'*+\/=?^_`{|}~-]+)*@([a-z0-9_-]+\.)+(com|net|org|edu|int|mil|gov|arpa|biz|aero|name|coop|info|pro|museum|[a-z]{2}) 

-- generated 
[a-z0-9!#$%&'*+\/=?^_`{|}~-]+(\.[a-z0-9!#$%&'*+\/=?^_`{|}~-]+)*@([a-z0-9_-]+\.)+(com|net|org|edu|int|mil|gov|arpa|biz|aero|name|coop|info|pro|museum|[a-z]{2}) 

我應該正則表達式保存爲<![CDATA[ regex ]]>或者這只是XML文件的默認行爲(編碼一些字符,並在我讀回時自動解碼)?

這是我的代碼必須生成元素:

XElement attr = 
    new XElement("Attribute", 
     new XAttribute("RegEx", item.RegularExpression) 
    ); 

而這正是它產生:

<Attribute RegEx="[a-z0-9!#$%&amp;amp;&amp;apos;*+\/=?^_`{|}~-]+(\.[a-z0-9!#$%&amp;amp;&amp;apos;*+\/=?^_`{|}~-]+)*@([a-z0-9_-]+\.)+(com|net|org|edu|int|mil|gov|arpa|biz|aero|name|coop|info|pro|museum|[a-z]{2})" /> 
+1

事實上,你想導出一個正則表達式,最終表明它將被導入並執行。請注意,這是一個潛在的ReDoS漏洞:http://en.wikipedia.org/wiki/ReDoS –

+0

我不知道這個 – Catalin

回答

1

的問題是,在數據庫中的正則表達式已經使用XML轉義,並將其複製到XML文件中時,您又添加了另一層轉義,因此&apos;已成爲&amp;apos;

轉義特殊字符有兩種方法,您可以將&轉換爲&amp;,或者將其包裝在CDATA中。在這種情況下,你不想這樣做,因爲它已經逃脫了。

我不熟悉link-to-xml,所以我不知道如何在該環境中正確執行此操作。

+0

我現在明白了這個問題。爲了安全起見,我會讓他們留在CDATA中,並且不要改變正則表達式模式。我很高興從XML高級獲得答案:) – Catalin

相關問題