被檢測到「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:從零開始的軟體開發生活」
請大家繼續支持 ^_^