CA2353: Osäker datauppsättning eller DataTable i serialiserbar typ
Property | Värde |
---|---|
Regel-ID | CA2353 |
Rubrik | Osäker datauppsättning eller DataTable i serialiserbar typ |
Kategori | Säkerhet |
Korrigeringen är icke-bakåtkompatibel | Icke-icke-bryta |
Aktiverad som standard i .NET 8 | Nej |
Orsak
En klass eller struct markerad med ett XML-serialiseringsattribut eller ett datakontraktsattribut innehåller ett fält eller DataTable en DataSet egenskap.
XML-serialiseringsattribut omfattar:
- XmlAnyAttributeAttribute
- XmlAnyElementAttribute
- XmlArrayAttribute
- XmlArrayItemAttribute
- XmlChoiceIdentifierAttribute
- XmlElementAttribute
- XmlEnumAttribute
- XmlIgnoreAttribute
- XmlIncludeAttribute
- XmlRootAttribute
- XmlTextAttribute
- XmlTypeAttribute
Serialiseringsattribut för datakontrakt omfattar:
Regelbeskrivning
När deserialisera ej betrodda indata och grafen för deserialiserat objekt innehåller en DataSet eller DataTable, kan en angripare skapa en skadlig nyttolast för att utföra en överbelastningsattack. Det kan finnas okända sårbarheter för fjärrkörning av kod.
Den här regeln hittar typer som är osäkra när deserialiseras. Om koden inte deserialiserar de typer som hittas har du ingen sårbarhet för deserialisering.
Mer information finns i Säkerhetsvägledning för DataSet och DataTable.
Så här åtgärdar du överträdelser
- Om möjligt använder du Entity Framework i stället för DataSet och DataTable.
- Gör serialiserade data manipuleringssäkra. Efter serialiseringen signerar kryptografiskt serialiserade data. Verifiera den kryptografiska signaturen innan deserialiseringen. Skydda den kryptografiska nyckeln från att avslöjas och utformas för nyckelrotationer.
När du ska ignorera varningar
Det är säkert att ignorera en varning från den här regeln om:
- Den typ som hittas av den här regeln deserialiseras aldrig, antingen direkt eller indirekt.
- Du vet att indata är betrodda. Tänk på att programmets förtroendegräns och dataflöden kan ändras över tid.
- Du har vidtagit en av försiktighetsåtgärderna i Så här åtgärdar du överträdelser.
Ignorera en varning
Om du bara vill förhindra en enda överträdelse lägger du till förprocessordirektiv i källfilen för att inaktivera och aktiverar sedan regeln igen.
#pragma warning disable CA2353
// The code that's violating the rule is on this line.
#pragma warning restore CA2353
Om du vill inaktivera regeln för en fil, mapp eller ett projekt anger du dess allvarlighetsgrad till none
i konfigurationsfilen.
[*.{cs,vb}]
dotnet_diagnostic.CA2353.severity = none
Mer information finns i Så här utelämnar du kodanalysvarningar.
Exempel på pseudokod
Kränkning
using System.Data;
using System.Runtime.Serialization;
[XmlRoot]
public class MyClass
{
public DataSet MyDataSet { get; set; }
}
Relaterade regler
CA2350: Se till att DataTable.ReadXml()-indata är betrodda
CA2351: Se till att DataSet.ReadXml()-indata är betrodda
CA2355: Osäker datauppsättning eller datatabell i deserialiserat objektdiagram
CA2356: Osäker datauppsättning eller datatabell i webbdeserialiserat objektdiagram