C# &引用;不安全的“过载”;警告

C# &引用;不安全的“过载”;警告,c#,visual-studio-2019,C#,Visual Studio 2019,我有以下代码: using (FileStream fs = new FileStream(path_to_xml, FileMode.Open)) { using (XmlReader xr = XmlReader.Create(fs)) { // Do something with xr } } 我收到了警告 CA3075:不接受的XmlReader.Create的不安全重载 XmlReaderSettings参数 如果我更改Create语句并添加X

我有以下代码:

using (FileStream fs = new FileStream(path_to_xml, FileMode.Open))
{
    using (XmlReader xr = XmlReader.Create(fs))
    {
        // Do something with xr
    }
}
我收到了警告

CA3075:不接受的XmlReader.Create的不安全重载 XmlReaderSettings参数

如果我更改Create语句并添加XmlReaderSettings,如下所示:

using (XmlReader xr = XmlReader.Create(fs, new XmlReaderSettings()))
我收到警告

CA3075:提供了一个可能不安全的XmlReaderSettings实例 创建方法

这一警告的真正原因是什么?怎样才能让它消失

我正在使用VS2019预览版1.0

我以前从未见过这个警告,所以它可能是VS2019的新版本

更新:我已经看了这个页面,大多数解决方案都说设置“XmlReaderSettings(){DtdProcessing=DtdProcessing.banford}”,我仍然收到警告。

查看解释了根本原因和许多可能的修复,但归结起来,正在读取的XML可能包含对潜在不安全位置的DTD引用,精心编制的文档可能代表一个漏洞。从文档中:

如果使用不安全的DTD处理实例或引用外部实体源,解析器可能会接受不受信任的输入并向攻击者披露敏感信息

问题在于XmlReader和XmlReaderSettings类的默认设置都允许这种行为。由于默认设置会出现此问题,您需要明确地设置为安全选项,这最终归结为将
DtdProcessing
设置为
DtdProcessing。禁止
xmlsolver
设置为
XmlSecureResolver

回到您的代码,它可以更改为:

using (XmlReader xr = XmlReader.Create(fs, new XmlReaderSettings() { DtdProcessing = DtdProcessing.Prohibit }))


我尝试了两个例子,但仍然得到了警告。第二个示例需要构造函数中的参数。第二个示例无法工作,因为
XmlSecureResolver
的所有构造函数都需要参数()。可能是复制品。此问题尚未标记为已修复。@Jeroenmoster对此表示感谢。你可能在这里发现了什么!
using (XmlReader xr = XmlReader.Create(fs, new XmlReaderSettings() { XmlResolver = new XmlSecureResolver() }))