Поделиться через


CA5366: использование XmlReader для чтения XML набора данных

Свойство Значение
Идентификатор правила CA5366
Заголовок используйте XmlReader для чтения XML из набора данных
Категория Безопасность
Исправление является критическим или не критическим Не критическое
Включен по умолчанию в .NET 8 No

Причина

Определение типа документа (DTD) определяет структуру и допустимые элементы и атрибуты XML-документа. Обращение к DTD из внешнего ресурса может привести к распространению атак типа "отказ в обслуживании" (DoS). Большинство модулей чтения не могут отключить обработку DTD и ограничить загрузку внешних ссылок, за исключением System.Xml.XmlReader. Это правило активируется при использовании этих модулей чтения для загрузки XML-данных с помощью одного из следующих методов:

Описание правила

Использование System.Data.DataSet для чтения XML с ненадежными данными может привести к загрузке опасных внешних ссылок, что следует ограничить, используя XmlReader с безопасным сопоставителем или отключив обработку DTD.

Устранение нарушений

Для чтения XML следует использовать XmlReader или его производные классы.

Когда лучше отключить предупреждения

Отключите вывод предупреждения для этого правила при работе с надежным источником данных.

Отключение предупреждений

Если вы просто хотите отключить одно нарушение, добавьте директивы препроцессора в исходный файл, чтобы отключить и повторно включить правило.

#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)));
    }
}