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

Свойство Значение
Идентификатор правила CA2362
Заголовок Ненадежные данные DataSet или DataTable в автоматически созданном сериализуемом типе могут быть уязвимыми для атак удаленного выполнения кода
Категория Безопасность
Исправление является критическим или не критическим Не критическое
Включен по умолчанию в .NET 8 No

Причина

Класс или структура, помеченные как SerializableAttribute, содержат поле или свойство DataSet или DataTable и не имеют DesignerCategoryAttribute.

Правило CA2352 действует так же при отсутствии DesignerCategoryAttribute.

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

В случае десериализации ненадежных входных данных с помощью класса BinaryFormatter и если граф десериализованных объектов содержит DataSet или DataTable, злоумышленник может создавать вредоносные данные для проведения атаки удаленного выполнения кода.

Это правило похоже на CA2352, но для автоматически созданного кода для представления данных в памяти в приложении с графическим пользовательским интерфейсом. Обычно эти автоматически сформированные классы не десериализуются из недоверенных входных данных. Потребление в приложении может быть различным.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Нарушение

using System.Data;
using System.Xml.Serialization;

namespace ExampleNamespace
{
    [global::System.CodeDom.Compiler.GeneratedCode(""System.Data.Design.TypedDataSetGenerator"", ""2.0.0.0"")]
    [global::System.Serializable()]
    [global::System.ComponentModel.DesignerCategoryAttribute(""code"")]
    [global::System.ComponentModel.ToolboxItem(true)]
    [global::System.Xml.Serialization.XmlSchemaProviderAttribute(""GetTypedDataSetSchema"")]
    [global::System.Xml.Serialization.XmlRootAttribute(""Package"")]
    [global::System.ComponentModel.Design.HelpKeywordAttribute(""vs.data.DataSet"")]
    public class ExampleClass : global::System.Data.DataSet {
        private DataTable table;
    }
}

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

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

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

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

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

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

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

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