Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
| Egenskap | Värde |
|---|---|
| Regel-ID | CA2355 |
| Title | Osäker datauppsättning eller datatabell i deserialiserat objektdiagram |
| Kategori | Säkerhet |
| Korrigeringen är antingen invasiv eller icke-invasiv | Oumbrytbar |
| Aktiverad som standard i .NET 10 | Nej |
| Tillämpliga språk | C# och Visual Basic |
Orsak
Deserialisering när den kastade eller angivna typens objektdiagram kan innehålla en DataSet eller DataTable.
Den här regeln använder en annan metod än en liknande regel, CA2353: Osäker datauppsättning eller DataTable i serialiserbar typ.
Den kastade eller angivna typen utvärderas när:
- Initiera ett DataContractSerializer objekt
- Initiera ett DataContractJsonSerializer objekt
- Initiera ett XmlSerializer objekt
- Åberopa JavaScriptSerializer.Deserialize
- Åberopa JavaScriptSerializer.DeserializeObject
- Åberopa XmlSerializer.FromTypes
- Anropa Newtonsoft Json.NET JsonSerializer.Deserialize
- Anropa Newtonsoft Json.NET JsonConvert.DeserializeObject
Regelbeskrivning
När man deserialiserar opålitlig input med BinaryFormatter och det deserialiserade objektgrafen innehåller en DataSet eller DataTable, kan en angripare skapa en skadlig payload för att utföra en överbelastningsattack. Det kan finnas okända sårbarheter för fjärrkörning av kod.
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, kryptografiskt signera de serialiserade uppgifterna. 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:
- 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 CA2355
// The code that's violating the rule is on this line.
#pragma warning restore CA2355
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.CA2355.severity = none
Mer information finns i Så här utelämnar du kodanalysvarningar.
Exempel på pseudokod
Kränkning
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);
}
}
Relaterade regler
CA2350: Se till att DataTable.ReadXml()-indata är betrodda
CA2351: Se till att DataSet.ReadXml()-indata är betrodda
CA2353: Osäker datauppsättning eller DataTable i serialiserbar typ
CA2356: Osäker datauppsättning eller datatabell i webbdeserialiserat objektdiagram