CA5366:将 XmlReader 用于数据集读取 XML

属性
规则 ID CA5366
标题 将 XmlReader 用于数据集读取 XML
类别 安全性
修复是中断修复还是非中断修复 非中断
在 .NET 8 中默认启用

原因

文档类型定义 (DTD) 定义了 XML 文档的结构以及合法元素和特性。 从外部资源引用 DTD 可能导致潜在的拒绝服务 (DoS) 攻击。 大多读取器不能禁用 DTD 处理并限制外部引用加载,但 System.Xml.XmlReader 除外。 使用其他这些读取器通过以下某种方法加载 XML 会触发此规则:

规则说明

使用 System.Data.DataSet 读取包含不受信任数据的 XML 可能会加载危险的外部引用,这应该使用带有安全解析程序或禁用 DTD 处理的 XmlReader 对其进行限制。

如何解决冲突

使用 XmlReader 或其派生类读取 XML。

何时禁止显示警告

处理受信任数据源时,禁止显示此规则的警告。

抑制警告

如果只想抑制单个冲突,请将预处理器指令添加到源文件以禁用该规则,然后重新启用该规则。

#pragma warning disable CA5366
// The code that's violating the rule is on this line.
#pragma warning restore CA5366

若要对文件、文件夹或项目禁用该规则,请在配置文件中将其严重性设置为 none

[*.{cs,vb}]
dotnet_diagnostic.CA5366.severity = none

有关详细信息,请参阅如何禁止显示代码分析警告

伪代码示例

冲突

using System.Data;
using System.IO;

public class ExampleClass
{
    public void ExampleMethod()
    {
        new DataSet().ReadXml(new FileStream("xmlFilename", FileMode.Open));
    }
}

解决方案

using System.Data;
using System.IO;
using System.Xml;

public class ExampleClass
{
    public void ExampleMethod()
    {
        new DataSet().ReadXml(new XmlTextReader(new FileStream("xmlFilename", FileMode.Open)));
    }
}