提问人:user2526713 提问时间:11/16/2023 更新时间:11/16/2023 访问量:42
Framework 4.7.2 和 .NET 7 的不同行为 [已关闭]
Different behavior for Framework 4.7.2 and .NET 7 [closed]
问:
这是我的 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 中工作正常。
我该如何解决这个问题?
答:
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))
....
阅读文章->
评论