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