Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
| 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; }
}
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