Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
XML注入C#_C#_Asp.net_Xml_C# 4.0_Fortify - Fatal编程技术网

XML注入C#

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

在下面的代码中显示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 );
    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>
&lt;foo&gt;embedded XML that is escaped!&lt;/foo&gt;
</item>