"An insecure overload of"警告



我有以下代码:

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实例到XmlReader.Create方法。

此警告的实际原因是什么?消除此警告的正确方法是什么?

我正在使用VS 2019预览版1.0

我以前从未见过这个警告,所以也许这是VS 2019的新警告?

更新:我已经看了这个页面https://learn.microsoft.com/en-us/visualstudio/code-quality/ca3075-insecure-dtd-processing?view=vs-2017和大多数解决方案都说设置"XmlReaderSettings(({DtdProcessing=DtdProcessing.Prohibit}",但我仍然收到警告。

查看警告的文档可以解释根本原因和许多可能的修复方法,但归根结底,正在读取的XML可能包含对潜在不安全位置的DTD引用,而精心编制的文档可能表示存在漏洞。来自文档:

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

问题在于XmlReader和XmlReaderSettings类的默认设置都允许这种行为。由于默认情况下会出现此问题,因此您需要明确地设置一个安全选项,最终归结为将DtdProcessing设置为DtdProcessing.Prohibit或将XmlResolver设置为XmlSecureResolver

回到你的代码,它可以这样更改:

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

using (XmlReader xr = XmlReader.Create(fs, new XmlReaderSettings() { XmlResolver = new XmlSecureResolver() }))

相关内容

最新更新