Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
| Свойство | Значение |
|---|---|
| Идентификатор правила | CA5370 |
| Заголовок | Использование XmlReader для проверки модуля чтения |
| Категория | Безопасность |
| Исправление является критическим или не критическим | Не критическое |
| Включен по умолчанию в .NET 10 | 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);
}