修复“xml外部实体引用的不正确限制”的最佳方法是什么?

时间:2014-02-21 15:10:37

标签: c# .net xml veracode

我们最近运行的VeraCode指出了以下方法:

    public XmlElement RunProcedureXmlElement(string Procedure, List<SqlParameter> Parameters)
    {
        DataSet ds = RunProcedureDataSet(Procedure, Parameters);
        XmlDocument xmlDoc = new XmlDocument();
        StringBuilder strXML = new StringBuilder();

        foreach (DataTable dt in ds.Tables)
        {
            foreach (DataRow dr in dt.Rows)
            {
                strXML.Append(dr[0]); // Do I still need .ToString()???
            }
        }
        if (strXML.Length == 0) strXML.Append("<root total=\"0\"></root>");

        try
        {
            xmlDoc.LoadXml(strXML.ToString());
        }
        catch (XmlException e)
        {

        }

        return xmlDoc.DocumentElement;
    }

修复该方法的优秀解决方案是什么,以便VeraCode停止抱怨?

感谢的

4 个答案:

答案 0 :(得分:3)

在做了一些研究之后,这段代码应该解决它:

        using (System.IO.MemoryStream stream = new System.IO.MemoryStream (Encoding.Default.GetBytes(strXML.ToString())))
        {
            XmlReaderSettings settings = new XmlReaderSettings();
            settings.DtdProcessing = DtdProcessing.Prohibit;
            using (XmlReader reader = XmlReader.Create(stream, settings))
            {
                try
                {
                    xmlDoc.Load(reader);
                }
                catch(XmlException e)
                {

                }
            }
        }

答案 1 :(得分:2)

我对Veracode也有同样的问题,以下解决了这个问题 声明XmlReader后:

XmlDocument xmlDoc = new XmlDocument();

添加行:

xmlDoc.XmlResolver = null;

答案 2 :(得分:2)

根据VS2017 IDE建议,您可以通过以下方法进行纠正:

    XmlDocument xmlDoc = new XmlDocument { XmlResolver = null };

答案 3 :(得分:1)

我使用以下示例来解决此问题

  XmlDocument xmlDoc = new XmlDocument();
  xmlDoc.XmlResolver = null;
  xmlDoc.LoadXml(strXML.ToString());