CA5372: использование XmlReader для XPathDocument
Свойство | Значение |
---|---|
Идентификатор правила | CA5372 |
Заголовок | Использование XmlReader для XPathDocument |
Категория | Безопасность |
Исправление является критическим или не критическим | Не критическое |
Включен по умолчанию в .NET 9 | No |
Причина
Использование экземпляра класса XPathDocument
, созданного без объекта XmlReader
, может привести к отказу в обслуживании, раскрытию информации и подделкам запросов на стороне сервера. Эти атаки становятся возможными из-за недоверенных DTD и обработки схемы XML, которая позволяет включать бомбы XML и вредоносные внешние сущности в XML. Отключить DTD можно только с помощью XmlReader
. Для обработки встроенной схемы XML в виде XmlReader
свойство ProhibitDtd
и ProcessInlineSchema
по умолчанию имеет значение false в .NET Framework начиная с версии 4.0. Другие параметры, такие как Stream
, TextReader
и XmlSerializationReader
, не могут отключить обработку DTD.
Описание правила
Обработка XML из недоверенных данных может привести к загрузке опасных внешних ссылок. Это можно ограничить, используя XmlReader
с безопасным сопоставителем или отключив обработку DTD. Это правило обнаруживает код, использующий класс XPathDocument
, и не принимает XmlReader
в качестве параметра конструктора.
Устранение нарушений
Используйте конструкторы XPathDocument(XmlReader, *)
.
Когда лучше отключить предупреждения
Это предупреждение можно отключить, если объект XPathDocument
используется для обработки XML-кода, полученного из доверенного источника, который нельзя незаконно изменить.
Отключение предупреждений
Если вы просто хотите отключить одно нарушение, добавьте директивы препроцессора в исходный файл, чтобы отключить и повторно включить правило.
#pragma warning disable CA5372
// The code that's violating the rule is on this line.
#pragma warning restore CA5372
Чтобы отключить правило для файла, папки или проекта, задайте его серьезность none
в файле конфигурации.
[*.{cs,vb}]
dotnet_diagnostic.CA5372.severity = none
Дополнительные сведения см. в разделе Практическое руководство. Скрытие предупреждений анализа кода.
Примеры псевдокода
Нарушение
В приведенном ниже примере псевдокода показан шаблон, обнаруживаемый этим правилом.
Тип первого параметра XPathDocument
не равен XmlReader
.
using System.IO;
using System.Xml.XPath;
...
var obj = new XPathDocument(stream);
Решение
using System.Xml;
using System.Xml.XPath;
...
public void TestMethod(XmlReader reader)
{
var obj = new XPathDocument(reader);
}