[ASP.NET]XML External Entity Injection

被檢測到「XML External Entity Injection」的Issue,
要如何調整呢?

問題

最近系統有被檢測到「XML External Entity Injection」的Issue,測試的Code如下,

StreamReader reader = new StreamReader(Request.InputStream, new UTF8Encoding(false));
string contentXMLString = reader.ReadToEnd();
XmlDocument contextXML = new XmlDocument();
contextXML.LoadXml(contentXMLString);
Response.Write(contextXML.InnerXml);

 

說明

XML解析器不會阻止及限制外部實體解析,如此可導致解析器遭受XML外部實體攻擊。

 

建議

防止 XXE 攻擊的最佳方式,是停用內嵌 DTD (將 DtdProcessing 設為 DtdProcessing.Prohibit) ,或停用 XML 實體解析 (將 XmlReaderSettings.XmlResolver 屬性設為 Null),以停用 XML 實體解析。

 

改進方式

我們的XML沒有要用到外部解析,所以就上面的程式,只要把 XmlDocument 的 XmlResolver 設定成 null 就可以了(contextXML.XmlResolver = null;)! 調整如下,

StreamReader reader = new StreamReader(Request.InputStream, new UTF8Encoding(false));
string contentXMLString = reader.ReadToEnd();
XmlDocument contextXML = new XmlDocument();
contextXML.XmlResolver = null;
contextXML.LoadXml(contentXMLString);
Response.Write(contextXML.InnerXml);

 

Hi, 

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

請大家繼續支持 ^_^