C# 解决问题的最佳方法是什么;xml外部实体引用的限制不正确;?

C# 解决问题的最佳方法是什么;xml外部实体引用的限制不正确;?,c#,.net,xml,veracode,C#,.net,Xml,Veracode,我们最近运行的代码指出了以下方法: public XmlElement RunProcedureXmlElement(string Procedure, List<SqlParameter> Parameters) { DataSet ds = RunProcedureDataSet(Procedure, Parameters); XmlDocument xmlDoc = new XmlDocument(); Strin

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

    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;
    }
公共XmlElement RunProcedureXmlElement(字符串过程,列表参数) { 数据集ds=运行过程数据集(过程、参数); XmlDocument xmlDoc=新的XmlDocument(); StringBuilder strXML=新的StringBuilder(); foreach(ds.表中的数据表dt) { foreach(数据行dr在dt.行中) { strXML.Append(dr[0]);//我是否仍然需要.ToString()??? } } 如果(strXML.Length==0)strXML.Append(“”); 尝试 { LoadXml(strXML.ToString()); } 捕获(XMLE异常) { } 返回xmlDoc.DocumentElement; } 有什么好的解决方案可以修复该方法,使VeraCode停止抱怨


Thank's

在做了一些研究之后,这段代码应该可以修复它:

        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)
                {

                }
            }
        }

我对Veracode也有同样的问题,下面解决了它。
声明
XmlReader
后:

XmlDocument xmlDoc = new XmlDocument();
添加行:

xmlDoc.XmlResolver = null;

我用下面的例子来解决这个问题

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

从VS2017 IDE建议中,您可以通过以下方式更正它:

XmlDocument xmlDoc=newxmldocument{xmlsolver=null};

这是C#,对吗?适当地标记会很有帮助,因为解决这个问题(通过禁止文档提供自己的DTD)需要了解平台的XML API。啊-我知道您已经禁止了DTD处理。听起来像是VeraCode中的一个bug;我会把它交给他们。我把DTD处理。禁止以修复它。我以前没有。所以,VeraCode没有问题。VeraCode指向我的方法开始的那一行。我想知道你是否知道VeraCode会抱怨这个方法中的哪一行?它是我附加“”的地方吗?如果是,我可以替换它吗?或者它只是因为我没有处理TD处理而抱怨?作为一个客户,您可以像公司以外的任何人一样访问文档——但是如果我编写一个静态分析器来查找这个特定问题,那么它将是
Load()
LoadXml()
我将寻找触发此特定分析的调用。感谢Charles。所以,基本上,使用DTD处理。禁止就足以解决这个问题了?最后,我用David的解决方案解决了这个问题。导致半信任软件不受支持。