CA2353: Niebezpieczny zestaw danych lub dataTable w typie z możliwością serializacji
Właściwości | Wartość |
---|---|
Identyfikator reguły | CA2353 |
Tytuł | Niebezpieczny element DataSet lub DataTable w typie możliwym do serializacji |
Kategoria | Bezpieczeństwo |
Poprawka powodująca niezgodność lub niezgodność | Niezgodność |
Domyślnie włączone na platformie .NET 9 | Nie. |
Przyczyna
Klasa lub struktura oznaczona atrybutem serializacji XML lub atrybutem kontraktu danych zawiera DataSet pole lub DataTable właściwość.
Atrybuty serializacji XML obejmują:
- XmlAnyAttributeAttribute
- XmlAnyElementAttribute
- XmlArrayAttribute
- XmlArrayItemAttribute
- XmlChoiceIdentifierAttribute
- XmlElementAttribute
- XmlEnumAttribute
- XmlIgnoreAttribute
- XmlIncludeAttribute
- XmlRootAttribute
- XmlTextAttribute
- XmlTypeAttribute
Atrybuty serializacji kontraktu danych obejmują:
Opis reguły
W przypadku deserializacji niezaufanych danych wejściowych, a deserializowany graf obiektu zawiera DataSet element lub DataTable, osoba atakująca może utworzyć złośliwy ładunek w celu przeprowadzenia ataku typu "odmowa usługi". Może istnieć nieznana luka w zabezpieczeniach dotycząca zdalnego wykonywania kodu.
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 CA2353
// The code that's violating the rule is on this line.
#pragma warning restore CA2353
Aby wyłączyć regułę dla pliku, folderu lub projektu, ustaw jego ważność na none
w pliku konfiguracji.
[*.{cs,vb}]
dotnet_diagnostic.CA2353.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.Runtime.Serialization;
[XmlRoot]
public class MyClass
{
public DataSet MyDataSet { get; set; }
}
Powiązane reguły
CA2350: Upewnij się, że dane wejściowe elementu DataTable.ReadXml() są zaufane
CA2351: Upewnij się, że dane wejściowe elementu DataSet.ReadXml() są zaufane
CA2355: Niebezpieczny element DataSet lub DataTable w deserializowanym grafie obiektu
CA2356: Niebezpieczny element DataSet lub DataTable w internetowym deserializowanym grafie obiektów