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

Właściwości Wartość
Identyfikator reguły CA2351
Stanowisko Upewnij się, że dane wejściowe elementu DataSet.ReadXml () są zaufane
Kategoria Bezpieczeństwo
Poprawka powodująca niezgodność lub niezgodność Niezgodność
Domyślnie włączone na platformie .NET 8 Nie.

Przyczyna

Metoda DataSet.ReadXml została wywołana lub odwołana, a nie w kodzie wygenerowanym automatycznie.

Ta reguła klasyfikuje automatycznie wygenerowany kod b:

CA2361 jest podobną regułą, która DataSet.ReadXml występuje w kodzie wygenerowanym automatycznie.

Opis reguły

W przypadku deserializacji elementu DataSet z niezaufanymi danymi wejściowymi osoba atakująca może utworzyć złośliwe dane wejściowe w celu przeprowadzenia ataku typu "odmowa usługi". Może istnieć nieznana luka w zabezpieczeniach dotycząca zdalnego wykonywania kodu.

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
  • 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:

  • 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 CA2351
// The code that's violating the rule is on this line.
#pragma warning restore CA2351

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

[*.{cs,vb}]
dotnet_diagnostic.CA2351.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;

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

CA2350: Upewnij się, że dane wejściowe elementu DataTable.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

CA2361: Upewnij się, że automatycznie wygenerowana klasa zawierająca klasę DataSet.ReadXml() nie jest używana z niezaufanymi danymi

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