Framework 4.7.2 和 .NET 7 的不同行为 [已关闭]

Different behavior for Framework 4.7.2 and .NET 7 [closed]

提问人:user2526713 提问时间:11/16/2023 更新时间:11/16/2023 访问量:42

问:


想改进这个问题吗?通过编辑这篇文章添加详细信息并澄清问题。

6天前关闭。

这是我的 xslt 转换代码

using (var stringReader = new StringReader(xmlString))
using (var xmlReader = XmlReader.Create(stringReader))
{
    using (var memoryStream = new MemoryStream())
    {
        XslCompiledTransform xsl = new XslCompiledTransform();
        xsl.Load(xsltRenderFilePath);
        if (xsl.OutputSettings is null)
        {
            throw new InvalidOperationException("Failed to clone xls OutputSettings");
        }

        var xmlWriterSettings = xsl.OutputSettings.Clone();
        xmlWriterSettings.Encoding = new UTF8Encoding(false);
        xmlWriterSettings.OmitXmlDeclaration = true;

        using (var xmlWriter = XmlWriter.Create(memoryStream, xmlWriterSettings))
        {
            xsl.Transform(xmlReader, new XsltArgumentList(), xmlWriter);
        }
        result = memoryStream.ToArray();
    }
}

此代码在 WebApi (.Net Framework 4.7.2) 中使用时运行良好。

在升级此应用程序时,我在 .Net 7 中使用了相同的代码。它在我们的测试环境中运行良好,但在生产中中断,出现以下例外。

System.Xml.Xsl.XslLoadException:XSLT 编译错误。/mountPath/share/folder/some.xsl (410, 18) 发生错误。System.Xml.XmlException:禁止解析外部 URI。尝试访问:file:///mountPath/share/CDA-HTML-root.xsl

似乎它无法在 .Net 7 中加载相同的文件,而在 Framework 4.7.2 中工作正常。

我该如何解决这个问题?

C# xslt asp.net-core-webapi webapi webapi

评论

0赞 jmcilhinney 11/16/2023
这看起来非常像您可以搜索信息的那种错误消息。你有吗?如果不是,为什么不呢?如果是这样,你发现了什么?我只是看了看自己,发现了一些看似相关的信息,但我在打电话,所以我不打算转述你自己很容易找到的信息。
0赞 Charlieface 11/16/2023
这回答了你的问题吗?XslLoadException:禁止解析外部 URI

答:

0赞 Егор Ясиновский 11/16/2023 #1

在 .NET 中,存在针对漏洞 XXE(外部 XML 实体)的保护。它不允许您下载大数据,以免受到ZIP炸弹的影响。如果确定不会在将要处理的 XML 文件中传输具有攻击的 XML 文件,则可以将 XmlResolver 对象与 XmlReader 一起使用。这是如何完成的

var settings = new XmlReaderSettings()
{
  DtdProcessing = DtdProcessing.Parse,
  XmlResolver = new XmlUrlResolver(),
  MaxCharactersFromEntities = 0
};

using (var xmlReader = XmlReader.Create(xmlFileStringReader, settings))
  ....

阅读文章->

XmlResolvers

C 语言中的 XXE#