Udostępnij za pośrednictwem


CA2362: Niebezpieczny element DataSet lub DataTable w automatycznie wygenerowanym typie serializowalnym może być narażony na ataki zdalnego wykonywania kodu

Właściwości Wartość
Identyfikator reguły CA2362
Tytuł Niebezpieczny element DataSet lub DataTable w automatycznie wygenerowanym typie, który można serializować, może być narażony na ataki polegające na zdalnym wykonaniu kodu
Kategoria Bezpieczeństwo
Poprawka powodująca niezgodność lub niezgodność Niezgodność
Domyślnie włączone na platformie .NET 9 Nie.

Przyczyna

Klasa lub struktura oznaczona elementem SerializableAttribute zawiera DataSet pole lub DataTable właściwość i ma element DesignerCategoryAttribute.

CA2352 jest podobną regułą DesignerCategoryAttribute, jeśli nie istnieje .

Opis reguły

W przypadku deserializacji niezaufanych danych wejściowych za pomocą BinaryFormatter polecenia , a deserializowany graf obiektu zawiera DataSet element lub DataTable, osoba atakująca może utworzyć złośliwy ładunek w celu przeprowadzenia zdalnego ataku na wykonywanie kodu.

Ta reguła jest podobna do CA2352, ale w przypadku automatycznie wygenerowanego kodu dla reprezentacji danych w pamięci w aplikacji graficznego interfejsu użytkownika. Zazwyczaj te automatycznie wygenerowane klasy nie są deserializowane z niezaufanych danych wejściowych. Użycie aplikacji może się różnić.

Ta reguła znajduje typy, które są niezabezpieczone podczas deserializacji. Jeśli kod nie deserializuje znalezionych typów, nie masz luki w zabezpieczeniach deserializacji.

Aby uzyskać więcej informacji, zobacz DataSet and DataTable security guidance (Wskazówki dotyczące zabezpieczeń zestawu danych i tabeli danych).

Jak naprawić naruszenia

  • Jeśli to możliwe, użyj programu Entity Framework , a nie DataSet i DataTable.
  • Ustaw serializacji danych na dowód manipulacji. Po serializacji kryptograficznie podpisz serializowane dane. Przed deserializacji zweryfikuj podpis kryptograficzny. Ochrona klucza kryptograficznego przed ujawnieniem i projektowaniem rotacji kluczy.

Kiedy pomijać ostrzeżenia

Można bezpiecznie pominąć ostrzeżenie z tej reguły, jeśli:

  • Typ znaleziony przez tę regułę nigdy nie jest deserializowany, bezpośrednio lub pośrednio.
  • Wiesz, że dane wejściowe są zaufane. Należy wziąć pod uwagę, że granica zaufania aplikacji i przepływy danych mogą ulec zmianie w czasie.
  • Podjęto jeden z środków ostrożności w temacie Jak naprawić naruszenia.

Pomijanie ostrzeżenia

Jeśli chcesz po prostu pominąć pojedyncze naruszenie, dodaj dyrektywy preprocesora do pliku źródłowego, aby wyłączyć, a następnie ponownie włączyć regułę.

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

Aby wyłączyć regułę dla pliku, folderu lub projektu, ustaw jego ważność na none w pliku konfiguracji.

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

Aby uzyskać więcej informacji, zobacz Jak pominąć ostrzeżenia dotyczące analizy kodu.

Przykłady przykładów kodu przykładowego

Naruszenie

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: Upewnij się, że dane wejściowe elementu DataTable.ReadXml() są zaufane

CA2351: Upewnij się, że dane wejściowe elementu DataSet.ReadXml() są zaufane

CA2352: Niebezpieczny element DataSet lub DataTable w typie z możliwością serializacji może być narażony na ataki zdalnego wykonywania kodu

CA2353: Niebezpieczny zestaw danych lub dataTable w typie z możliwością serializacji

CA2354: Niebezpieczny element DataSet lub DataTable w deserializowanym grafie obiektu może być narażony na atak zdalnego wykonywania kodu

CA2355: Niebezpieczny element DataSet lub DataTable w deserializowanym grafie obiektu

CA2356: Niebezpieczny element DataSet lub DataTable w internetowym deserializowanym grafie obiektów

CA2362: Niebezpieczny element DataSet lub DataTable w automatycznie wygenerowanym typie serializowalnym może być narażony na ataki zdalnego wykonywania kodu