当前位置: 首页 > 知识库问答 >
问题:

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

佟阳焱
2023-03-14

我们最近运行了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停止抱怨?

谢谢

共有3个答案

斜向文
2023-03-14

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

  XmlDocument xmlDoc = new XmlDocument();
  xmlDoc.XmlResolver = null;
  xmlDoc.LoadXml(strXML.ToString());
郑锋
2023-03-14

经过一些研究,这段代码应该可以修复它:

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

                }
            }
        }
公羊渝
2023-03-14

我在Veracode上也遇到了同样的问题,下面的解决方案解决了这个问题。
声明XmlReader之后:

XmlDocument xmlDoc = new XmlDocument();

添加行:

xmlDoc.XmlResolver = null;
 类似资料:
  • 该产品处理一个XML文档,该文档可以包含URL解析为预期控制范围之外的文档的XML实体,从而导致该产品在其输出中嵌入不正确的文档<默认情况下,XML实体解析器将尝试解析和检索外部引用。如果攻击者控制的XML可以提交给这些函数之一,则攻击者可以访问有关内部网络、本地文件系统或其他敏感数据的信息。这称为XML外部实体(XXE)攻击。 什么都没有

  • 我有一些代码在一个从数据库中查询出来的列表上进行迭代,并对该列表中的每个元素发出HTTP请求。这个列表有时可能是一个相当大的数字(以千为单位),我希望确保我没有用数千个并发HTTP请求访问web服务器。 这段代码的缩写版本目前看起来像这样... 此代码正在节点4.3上运行。2.重申,可以都必须进行管理,以便在任何给定的时间内只进行一定数量的promise?

  • 问题内容: 复制列表的最佳方法是什么?我知道以下方法,哪种更好?还是有另一种方法? 问题答案: 如果要浅拷贝(不复制元素),请使用: 如果要进行深层复制,请使用复制模块:

  • 当我使用强化工具扫描时,我在“XML外部实体注入”下遇到了一些问题。 这是它显示错误的地方。根据fortify的建议,我给出了以下修复方法 但是问题仍然没有解决。如何解决这个问题?

  • 问题内容: 这对我来说是一个耻辱,但我不知道: 您应该使用克隆来复制阵列,因为通常这是最快的方法。 如Josh Bloch在此博客中所述:http : //www.artima.com/intv/bloch13.html 我一直都习惯。两种方法都是本机的,所以可能没有深入研究我不知道的库来源,为什么会这样。 我的问题很简单:为什么这是 最快的 方法? 有什么区别 ? 此处 说明了差异,但未回答为何

  • 问题内容: 我有一些代码遍历从数据库中查询出来的列表,并对该列表中的每个元素进行HTTP请求。该列表有时可能是一个相当大的数目(成千上万个),并且我想确保我不会遇到具有成千上万个并发HTTP请求的Web服务器。 该代码的缩写版本目前看起来像这样… 该代码在节点4.3.2上运行。重申一下,是否可以进行管理,以便在任何给定时间仅进行一定数量的承诺? 问题答案: 请注意,创建诺言本身不会触发诺言开始工作

  • 为什么未绑定版本限制是一个坏主意? 没有上界的版本约束,如 *,>=3.4 或者 dev-master,将允许更新依赖项的任何未来版本。这包括当前向后兼容性的主要版本。 一旦你的包的发布被标记,你就不能调整它的依赖性,以防依赖性破坏 BC- 你必须做一个新的发布,但是前一个版本会被打破。 唯一好的选择是定义约束的上限,在测试了包与依赖的新主版本兼容后,可以在新版本中增加。 例如,而不是使用 >=3

  • 问题内容: 用增强现实录制视频的最佳方法是什么?(向iPhone / iPad相机的框架添加文字,图像徽标) 以前,我试图弄清楚如何绘制并转换回CIImage回到CMSampleBuffer中 我几乎做了所有事情,只是在使用new in 录制视频时遇到问题 但是,无论如何,这种解决方案都不是很好,它在转换为()时会占用大量CPU 因此,我想在这里停下来,找到其他方法来录制具有增强现实的视频(例如,