[.NET]XML Injection

WebService中傳整份XML字串來處理,很多系統之前都是這樣做的!
現在居然原始碼掃描工具居然說 XElement.Parse 有問題....

之前系統透過Web Service來處理資料,而參數是接一份XML的字串,類似如下,

public bool ProcProductsWithXElement(string products)
{
	string xinput = products;
	XElement xElem = XElement.Parse(xinput);

	IEnumerable<XElement> productElements =
			from AdditionalXElement in xElem.Descendants("Produc")
			select AdditionalXElement;
	// **** 處理Products *****
	return true;
}

 

但這樣在 XElement.Parse(xinput) 就會有 XML Injection 的問題 (XDocument.Parse也會)!

報告建議不要使用整份文件的內容,可是 .…. 那現在要怎麼辦呢?

目前測試可以使用 XmlDocument 來處理,如下,

public bool ProcProductsWithXMLDocument(string products)
{
	string xinput = products;
	XmlDocument xdoc = new XmlDocument();
	//一定要設定哦! 
	xdoc.XmlResolver = null;
	xdoc.LoadXml(xinput);
	
	//如果需要XElement的話,可以將Nodes轉成XElement,
	var productElements = xdoc.SelectNodes(@"//Produc")
			.Cast<XmlNode>().Select(node => new XElement(node.Name, node.InnerXml));
	// **** 處理Products *****
	return true;
}

Hi, 

亂馬客Blog已移到了 「亂馬客​ : Re:從零開始的軟體開發生活

請大家繼續支持 ^_^