CA2351: убедитесь, что входные данные DataSet.ReadXml()являются доверенными

Свойство Значение
Идентификатор правила CA2351
Заголовок Убедитесь, что входные данные DataSet.ReadXml() являются доверенными
Категория Безопасность
Исправление является критическим или не критическим Не критическое
Включен по умолчанию в .NET 8 No

Причина

Метод DataSet.ReadXml был вызван или указан, но не в автоматически созданном коде.

Это правило классифицирует автоматически сформированный код следующим образом:

CA2361 является аналогичным правилом, действующим, когда метод DataSet.ReadXml отображается в автоматически созданном коде.

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

При десериализации DataSet с недоверенными входными данными злоумышленник может создавать вредоносные входные данные для проведения атаки типа "отказ в обслуживании". Могут существовать неизвестные уязвимости удаленного выполнения кода.

Дополнительные сведения см. в статье Руководство по безопасности для DataSet и DataTable.

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

  • По возможности используйте Entity Framework, а не DataSet.
  • Примените к сериализованным данным защиту от несанкционированных изменений. После сериализации криптографически подпишите сериализованные данные. Перед десериализацией проверьте криптографическую подпись. Защитите криптографический ключ от раскрытия и реализуйте регулярную смену ключей.

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

Можно отключить вывод предупреждений для этого правила в следующих случаях:

  • Вам известно, что входные данные являются доверенными. Учитывайте, что со временем могут измениться как границы доверия, так и потоки данных приложения.
  • Вы выполнили одну из мер предосторожности из раздела Устранение нарушений.

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

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

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

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

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

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

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

Нарушение

using System.Data;

public class ExampleClass
{
    public DataSet MyDeserialize(string untrustedXml)
    {
        DataSet dt = new DataSet();
        dt.ReadXml(untrustedXml);
    }
}

CA2350: убедитесь, что входные данные DataTable.ReadXml()являются доверенными

CA2352: небезопасный набор данных или DataTable в сериализуемом типе может быть уязвим для атак удаленного выполнения кода

CA2353: небезопасный набор данных или DataTable в сериализуемом типе

CA2354: небезопасный набор данных или DataTable в графе десериализированных объектов может быть уязвим для удаленной атаки на выполнение кода

CA2355: небезопасный набор данных или DataTable в графе десериализированных объектов

CA2356: ненадежные данные DataSet или DataTable в графе десериализованных веб-объектов

CA2361: убедитесь, что автогенерированный класс, содержащий DataSet.ReadXml() не используется с ненадежными данными.

CA2362: небезопасный набор данных или DataTable в автоматическом сериализируемом типе могут быть уязвимы для атак удаленного выполнения кода.