CA2352: Nebezpečné datové sady nebo datové tabulky v serializovatelném typu mohou být ohroženy útoky vzdáleného spuštění kódu

Vlastnost Hodnota
ID pravidla CA2352
Název Nezabezpečená datová sada nebo datová tabulka serializovatelného typu může být zranitelná vůči útokům vzdáleného spuštění kódu
Kategorie Zabezpečení
Oprava, která může být destruktivní nebo nedestruktivní Nezlomitelný
Povoleno ve výchozím nastavení v .NET 10 Ne
Příslušné jazyky C# a Visual Basic

Příčina

Třída nebo struktura označená SerializableAttribute obsahuje pole nebo vlastnost DataSet nebo DataTable a nemá DesignerCategoryAttribute.

CA2362 je podobné pravidlo pro případ, kdy existuje DesignerCategoryAttribute.

Popis pravidla

Při deserializaci nedůvěryhodného vstupu s BinaryFormatter, kdy graf deserializovaného objektu obsahuje DataSet nebo DataTable, může útočník vytvořit škodlivý náklad k provedení vzdáleného útoku na spuštění kódu.

Toto pravidlo najde typy, které jsou při deserializaci nezabezpečené. Pokud váš kód ne deserializuje nalezené typy, nemáte chybu zabezpečení deserializace.

Další informace naleznete v tématu DataSet a DataTable security guidance.

Jak opravit porušení

  • Pokud je to možné, použijte Entity Framework místo DataSet a DataTable.
  • Zabezpečte serializovaná data proti neoprávněné manipulaci. Po serializaci kryptograficky podepisujte serializovaná data. Před deserializací ověřte kryptografický podpis. Chraňte kryptografický klíč před zveřejněním a navrhněte obměny klíčů.

Kdy potlačit upozornění

Upozornění z tohoto pravidla je bezpečné potlačit, pokud:

  • Typ nalezený tímto pravidlem není nikdy deserializován, a to buď přímo nebo nepřímo.
  • Víte, že vstup je důvěryhodný. Vezměte v úvahu, že hranice důvěryhodnosti vaší aplikace a toky dat se můžou v průběhu času měnit.
  • Provedli jste jedno z bezpečnostních opatření v části Jak opravit porušení.

Potlačení upozornění

Pokud chcete pouze potlačit jedno porušení, přidejte do zdrojového souboru direktivy preprocesoru, abyste pravidlo zakázali a znovu povolili.

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

Pokud chcete pravidlo pro soubor, složku nebo projekt zakázat, nastavte jeho závažnost v none konfiguračním souboru.

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

Další informace naleznete v tématu Jak potlačit upozornění analýzy kódu.

Příklady pseudokódu

Porušení

using System.Data;
using System.Runtime.Serialization;

[Serializable]
public class MyClass
{
    public DataSet MyDataSet { get; set; }
}

CA2350: Ujistěte se, že vstup DataTable.ReadXml() je důvěryhodný.

CA2351: Ujistěte se, že vstup DataSet.ReadXml() je důvěryhodný.

CA2353: Nezabezpečená datová sada nebo datová tabulka v serializovatelném typu

CA2354: Nezabezpečená datová sada nebo datová tabulka v deserializovaném grafu objektů může být zranitelná vůči útokům vzdáleného spuštění kódu.

CA2355: Nezabezpečená datová sada nebo datová tabulka v deserializovaném grafu objektu

CA2356: Nezabezpečená datová sada nebo datová tabulka v grafu deserializovaného objektu webu

CA2361: Ujistěte se, že se u nedůvěryhodných dat nepoužívá automaticky vygenerovaná třída obsahující DataSet.ReadXml().

CA2362: Nebezpečná datová sada nebo datová tabulka v automaticky generovaném serializovatelném typu může být zranitelná vůči útokům vzdáleného spuštění kódu