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
Vlastnost | Hodnota |
---|---|
ID pravidla | CA2362 |
Název | Nezabezpečená datová sada nebo datová tabulka v automaticky vygenerovaném serializovatelném typu může být zranitelná vůči útokům 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 9 | No |
Příčina
Třída nebo struktura označená SerializableAttribute pomocí obsahuje DataSet nebo DataTable pole nebo vlastnost a má hodnotu DesignerCategoryAttribute.
CA2352 je podobné pravidlo, pokud neexistuje DesignerCategoryAttribute.
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.
Toto pravidlo je jako CA2352, ale pro automaticky vygenerovaný kód pro reprezentaci dat v paměti v aplikaci grafického uživatelského rozhraní. Tyto automaticky generované třídy obvykle nejsou deserializovány z nedůvěryhodného vstupu. Využití vaší aplikace se může lišit.
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.
- 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:
- 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 CA2362
// The code that's violating the rule is on this line.
#pragma warning restore CA2362
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.CA2362.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.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;
}
}
Související pravidla
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
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