CA2355: Nezabezpečená datová sada nebo datová tabulka v deserializovaném grafu objektu
Vlastnost | Hodnota |
---|---|
ID pravidla | CA2355 |
Název | Nezabezpečená datová sada nebo datová tabulka v grafu deserializovaných objektů |
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, pokud přetypovaný nebo zadaný typ objektový graf může obsahovat nebo DataSetDataTable.
Toto pravidlo používá jiný přístup k podobnému pravidlu CA2353: Nezabezpečená datová sada nebo Tabulka dat v serializovatelném typu.
Přetypovaný nebo zadaný typ se vyhodnotí v následujících případech:
- Inicializace objektu DataContractSerializer
- Inicializace objektu DataContractJsonSerializer
- Inicializace objektu XmlSerializer
- Vyvolání JavaScriptSerializer.Deserialize
- Vyvolání JavaScriptSerializer.DeserializeObject
- Vyvolání XmlSerializer.FromTypes
- Vyvolání Newtonsoft Json.NET JsonSerializer.Deserialize
- Vyvolání Newtonsoft Json.NET JsonConvert.DeserializeObject
Popis pravidla
Při deserializaci nedůvěryhodného vstupu s BinaryFormatter deserializovaným objektem a grafu deserializovaného objektu může DataSetDataTableútočník vytvořit škodlivou datovou část, která provede útok do služby. Může se jednat o neznámá ohrožení zabezpečení vzdáleného 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 CA2355
// The code that's violating the rule is on this line.
#pragma warning restore CA2355
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.CA2355.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);
}
}
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
CA2356: Nezabezpečená datová sada nebo datová tabulka v grafu deserializovaného objektu webu