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