"An insecure overload of" 警告
"An insecure overload of" warning
我有以下代码:
using (FileStream fs = new FileStream(path_to_xml, FileMode.Open))
{
using (XmlReader xr = XmlReader.Create(fs))
{
// Do something with xr
}
}
我收到警告
CA3075: An insecure overload of XmlReader.Create which does not accept
an XmlReaderSettings argument
如果我像这样更改 Create 语句并添加 XmlReaderSettings:
using (XmlReader xr = XmlReader.Create(fs, new XmlReaderSettings()))
我收到警告
CA3075: A potentially insecure XmlReaderSettings instance is provided
to XmlReader.Create method.
此警告的实际原因是什么?消除它的正确方法是什么?
我正在使用 VS 2019 预览版 1.0
我以前从未见过这个警告,所以它可能是 VS 2019 的新警告?
更新:我已经看过这个页面 https://docs.microsoft.com/en-us/visualstudio/code-quality/ca3075-insecure-dtd-processing?view=vs-2017,大多数解决方案都说要设置 'XmlReaderSettings(){ DtdProcessing = DtdProcessing.Prohibit }',但我仍然收到警告。
查看 documentation of the warning 解释了根本原因和许多可能的修复方法,但归根结底,正在阅读的 XML 可能包含对潜在不安全位置的 DTD 引用,并且精心制作的文档可能代表一个漏洞。来自文档:
If you use insecure DtdProcessing instances or reference external entity sources, the parser may accept untrusted input and disclose sensitive information to attackers.
问题在于 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() }))
我有以下代码:
using (FileStream fs = new FileStream(path_to_xml, FileMode.Open))
{
using (XmlReader xr = XmlReader.Create(fs))
{
// Do something with xr
}
}
我收到警告
CA3075: An insecure overload of XmlReader.Create which does not accept an XmlReaderSettings argument
如果我像这样更改 Create 语句并添加 XmlReaderSettings:
using (XmlReader xr = XmlReader.Create(fs, new XmlReaderSettings()))
我收到警告
CA3075: A potentially insecure XmlReaderSettings instance is provided to XmlReader.Create method.
此警告的实际原因是什么?消除它的正确方法是什么?
我正在使用 VS 2019 预览版 1.0
我以前从未见过这个警告,所以它可能是 VS 2019 的新警告?
更新:我已经看过这个页面 https://docs.microsoft.com/en-us/visualstudio/code-quality/ca3075-insecure-dtd-processing?view=vs-2017,大多数解决方案都说要设置 'XmlReaderSettings(){ DtdProcessing = DtdProcessing.Prohibit }',但我仍然收到警告。
查看 documentation of the warning 解释了根本原因和许多可能的修复方法,但归根结底,正在阅读的 XML 可能包含对潜在不安全位置的 DTD 引用,并且精心制作的文档可能代表一个漏洞。来自文档:
If you use insecure DtdProcessing instances or reference external entity sources, the parser may accept untrusted input and disclose sensitive information to attackers.
问题在于 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() }))