CA5370: используйте XmlReader для проверки средства чтения

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

Причина

Проверка недоверенных входных XML-данных с помощью экземпляра класса XmlValidatingReader без объекта XmlReader может привести к отказу в обслуживании, раскрытию информации и подделкам запросов на стороне сервера. Эти атаки становятся возможными из-за недоверенных DTD и обработки схемы XML, которая позволяет включать бомбы XML и вредоносные внешние сущности в XML. Отключить DTD можно только с помощью XmlReader. Обработка встроенной схемы XML, поскольку XmlReader имеет значение ProhibitDtd, и атрибут ProcessInlineSchema по умолчанию установлен в значение false, существует в .NET Framework начиная с версии 4.0.

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

Обработка недоверенных DTD и схем XML может разрешить загрузку опасных внешних ссылок. Эту опасную загрузку можно ограничить, используя XmlReader с защищенным распознавателем или с отключенной обработкой встроенных схем DTD и XML. Это правило обнаруживает код, использующий класс XmlValidatingReader без XmlReader в качестве параметра конструктора.

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

  • Используйте XmlValidatingReader(XmlReader) со свойствами ProhibitDtd и ProcessInlineSchema, установленными в значение false.
  • Начиная с .NET Framework 2.0 XmlValidatingReader считается устаревшим. Вы можете создать экземпляр проверяющего модуля чтения с помощью XmlReader.Create.

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

Это предупреждение можно отключить, если XmlValidatingReader всегда используется для проверки XML, полученного из доверенного источника, который нельзя незаконно изменить.

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

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

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

Чтобы отключить правило для файла, папки или проекта, задайте его серьезность none в файле конфигурации.

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

Дополнительные сведения см. в разделе Практическое руководство. Скрытие предупреждений анализа кода.

Примеры псевдокода

Нарушение

В приведенном ниже примере псевдокода показан шаблон, обнаруживаемый этим правилом. Тип первого параметра XmlValidatingReader.XmlValidatingReader() не равен XmlReader.

using System;
using System.IO;
using System.Xml;
...
public void TestMethod(Stream xmlFragment, XmlNodeType fragType, XmlParserContext context)
{
    var obj = new XmlValidatingReader(xmlFragment, fragType, context);
}

Решение

using System;
using System.Xml;
...
public void TestMethod(XmlReader xmlReader)
{
    var obj = new XmlValidatingReader(xmlReader);
}