XML注入C#
在下面的代码中显示xml注入的强化工具XML注入C#,c#,asp.net,xml,c#-4.0,fortify,C#,Asp.net,Xml,C# 4.0,Fortify,在下面的代码中显示xml注入的强化工具 XmlDocument doc = new XmlDocument(); doc.LoadXml(template); XmlElement list = doc.CreateElement(conn.XmlListTagName); foreach (EaiItem updateItem in itemList) { XmlElement item = doc.CreateElement( conn.XmlItemTagName ); f
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);
如何防止xml注入问题?如果您的
ItemFieldXml
应存储为xml中的CDATA
,而不是实际的xml,则使用XmlDocument.CreateCataSection
:
因此,与此相反:
item.InnerXml = updateItem.ItemFieldXml;
这样做:
item.InnerXml = updateItem.ItemFieldXml;
list.AppendChild( item );
将呈现为以下内容:
XmlCDataSection cdata = doc.CreateCDataSection( updatedItem.ItemFieldXml );
item.AppendChild( cdata );
list.AppendChild( item );
这将呈现为:
item.InnerText = updatedItem.ItemFieldXml;
list.AppendChild( item );
FooEmbeddedXML被转义/福
问题出在哪里?我假设ItemFieldXml
包含要作为item
元素的子XML片段插入文档的XML?还是要将其存储为CDATA
?
item.InnerText = updatedItem.ItemFieldXml;
list.AppendChild( item );
<item>
<foo>embedded XML that is escaped!</foo>
</item>