2017-02-27 10 views
0
XmlDocument doc = new XmlDocument(); 
doc.LoadXml(template); 
XmlElement list = doc.CreateElement(conn.XmlListTagName); 
foreach (EaiItem updateItem in itemList) 
{ 
    XmlElement item = doc.CreateElement(conn.XmlItemTagName); 
    foreach(String itemAttrib in updateItem.ItemAttributes.Keys) 
    { 
     item.SetAttribute(itemAttrib, updateItem.ItemAttributes[itemAttrib]); 
    } 
    item.InnerXml = updateItem.ItemFieldXml; 
    list.AppendChild(item); 
} 
doc.LastChild.AppendChild(list); 

FortifyはツールXMLインジェクションの問題を回避するには?XMLインジェクションC#

+0

問題はどのようなものですか? 'ItemFieldXml'には、あなたの文書に' item'要素の子XMLフラグメントとして挿入したいXMLが含まれていると思いますか?それとも 'CDATA'として保存したいですか? – Dai

答えて

1

あなたItemFieldXmlXmlDocument.CreateCDataSectionを使用し、その後、あなたのXMLに代わりの実際 XMLとしてCDATAとして格納する必要がある場合は、次の

だから、これに代えて:

XmlCDataSection cdata = doc.CreateCDataSection(updatedItem.ItemFieldXml); 
item.AppendChild(cdata); 
list.AppendChild(item); 

item.InnerXml = updateItem.ItemFieldXml; 
list.AppendChild(item); 

は、これを行います

これは次のように表示されます:

<item> 
<![CDATA[ 
<foo>embedded XML that is escaped!</foo> 
]]> 
</item> 

<foo>テキストは、はXMLパーサーを適合することによって、実際のXMLとして解釈されることはありません。

代替は角カッコは、XMLエンティティ&lt;&gt;に変換され、あなたは角括弧の多くを持っている場合、それは以下を使用しているので、 `` & though using CDATA`をより効率的になるテキストノードを作成することですスペース。

item.InnerText = updatedItem.ItemFieldXml; 
list.AppendChild(item); 

これは、レンダリングされます:

<item> 
&lt;foo&gt;embedded XML that is escaped!&lt;/foo&gt; 
</item> 
関連する問題