CA5366: использование XmlReader для чтения XML набора данных
Свойство | Значение |
---|---|
Идентификатор правила | CA5366 |
Заголовок | используйте XmlReader для чтения XML из набора данных |
Категория | Безопасность |
Исправление является критическим или не критическим | Не критическое |
Включен по умолчанию в .NET 9 | 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)));
}
}