gpt4 book ai didi

c# - "An insecure overload of"警告

转载 作者:行者123 更新时间:2023-12-04 01:49:53 26 4
gpt4 key购买 nike

我有以下代码:

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 类的默认设置都允许这种行为。由于默认存在此问题,您需要明确设置为安全选项,最终归结为设置 DtdProcessingDtdProcessing.ProhibitXmlResolverXmlSecureResolver .

回到您的代码,它可以更改为:
using (XmlReader xr = XmlReader.Create(fs, new XmlReaderSettings() { DtdProcessing = DtdProcessing.Prohibit }))

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

关于c# - "An insecure overload of"警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53637940/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com