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.

Vlastnost Hodnota
ID pravidla CA2354
Název Nezabezpečená datová sada nebo datová tabulka v grafu deserializovaných objektů může být zranitelná vůči útoku vzdáleného spuštění kódu
Kategorie Zabezpečení
Oprava způsobující chybu nebo chybu způsobující chybu Nenarušující
Povoleno ve výchozím nastavení v .NET 8 No

Příčina

Deserializace serializovaným objektem System.Runtime.Serialization.IFormatter a graf objektu přetypovaného typu může obsahovat nebo DataSetDataTable.

Toto pravidlo používá jiný přístup k podobnému pravidlu CA2352: Nebezpečná datová sada nebo Tabulka dat v serializovatelném typu mohou být ohroženy útoky vzdáleného spuštění kódu.

Popis pravidla

Při deserializaci nedůvěryhodného vstupu s grafem BinaryFormatter deserializovaného objektu nebo DataTableDataSet nebo může útočník vytvořit škodlivou datovou část pro provedení vzdáleného útoku na spuštění kódu.

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.
  • Zfalšujte serializovaná data a zfalšujte je. Po serializaci kryptograficky podepisujte serializovaná data. Před deserializací ověřte kryptografický podpis. Chraňte kryptografický klíč před zveřejněním a návrhem obměny klíčů.

Kdy potlačit upozornění

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

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

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.CA2354.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.IO;
using System.Runtime.Serialization;

[Serializable]
public class MyClass
{
    public MyOtherClass OtherClass { get; set; }
}

[Serializable]
public class MyOtherClass
{
    private DataSet myDataSet;
}

public class ExampleClass
{
    public MyClass Deserialize(Stream stream)
    {
        BinaryFormatter bf = new BinaryFormatter();
        return (MyClass) bf.Deserialize(stream);
    }
}

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

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

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

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

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