Mik*_*eel 4 c# visual-studio-2019
我有以下代码:
using (FileStream fs = new FileStream(path_to_xml, FileMode.Open))
{
using (XmlReader xr = XmlReader.Create(fs))
{
// Do something with xr
}
}
Run Code Online (Sandbox Code Playgroud)
我收到警告
CA3075: XmlReader.Create 的不安全重载不接受 XmlReaderSettings 参数
如果我更改 Create 语句并添加 XmlReaderSettings,如下所示:
using (XmlReader xr = XmlReader.Create(fs, new XmlReaderSettings()))
Run Code Online (Sandbox Code Playgroud)
我收到警告
CA3075:向 XmlReader.Create 方法提供了可能不安全的 XmlReaderSettings 实例。
此警告的实际原因是什么?让它消失的正确方法是什么?
我正在使用 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或.XmlResolverXmlSecureResolver
回到你的代码,它可以这样改变:
using (XmlReader xr = XmlReader.Create(fs, new XmlReaderSettings() { DtdProcessing = DtdProcessing.Prohibit }))
Run Code Online (Sandbox Code Playgroud)
或者
using (XmlReader xr = XmlReader.Create(fs, new XmlReaderSettings() { XmlResolver = new XmlSecureResolver() }))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2469 次 |
| 最近记录: |