CA2355: Onveilige gegevensset of gegevenstabel in de grafiek met gedeserialiseerde objecten
Eigenschappen | Weergegeven als |
---|---|
Regel-id | CA2355 |
Titel | Onveilige gegevensset of gegevenstabel in de deserialized objectgrafiek |
Categorie | Beveiliging |
Oplossing is brekend of niet-brekend | Niet-brekend |
Standaard ingeschakeld in .NET 9 | Nee |
Oorzaak
Deserialiseren wanneer de objectgrafiek van het gecastde of opgegeven type een DataSet of DataTablekan bevatten.
Deze regel maakt gebruik van een andere benadering van een vergelijkbare regel, CA2353: Onveilige gegevensset of gegevenstabel in serialiseerbare type.
Het cast-type of het opgegeven type wordt geëvalueerd wanneer:
- Een object initialiseren DataContractSerializer
- Een object initialiseren DataContractJsonSerializer
- Een object initialiseren XmlSerializer
- Beroep JavaScriptSerializer.Deserialize
- Beroep JavaScriptSerializer.DeserializeObject
- Beroep XmlSerializer.FromTypes
- Newtonsoft Json.NET JsonSerializer.Deserialize aanroepen
- Newtonsoft Json.NET JsonConvert.DeserializeObject aanroepen
Beschrijving van regel
Bij het deserialiseren van niet-vertrouwde invoer met BinaryFormatter en de deserialized objectgrafiek een DataSet of DataTablebevat, kan een aanvaller een schadelijke nettolading maken om een Denial of Service-aanval uit te voeren. Er zijn mogelijk onbekende beveiligingsproblemen met het uitvoeren van externe code.
Zie de beveiligingsrichtlijnen voor DataSet en DataTable voor meer informatie.
Schendingen oplossen
- Gebruik, indien mogelijk, Entity Framework in plaats DataSet van en DataTable.
- Maak de geserialiseerde gegevens manipulatiebestendig. Na serialisatie tekent u de geserialiseerde gegevens cryptografisch. Voordat deserialisatie wordt gedeserialiseerd, valideert u de cryptografische handtekening. Beveilig de cryptografische sleutel tegen openbaarmaking en ontwerp voor sleutelrotaties.
Wanneer waarschuwingen onderdrukken
Het is veilig om een waarschuwing van deze regel te onderdrukken als:
- U weet dat de invoer wordt vertrouwd. Houd er rekening mee dat de vertrouwensgrens en gegevensstromen van uw toepassing na verloop van tijd kunnen veranderen.
- U hebt een van de voorzorgsmaatregelen genomen in Het oplossen van schendingen.
Een waarschuwing onderdrukken
Als u slechts één schending wilt onderdrukken, voegt u preprocessorrichtlijnen toe aan uw bronbestand om de regel uit te schakelen en vervolgens opnieuw in te schakelen.
#pragma warning disable CA2355
// The code that's violating the rule is on this line.
#pragma warning restore CA2355
Als u de regel voor een bestand, map of project wilt uitschakelen, stelt u de ernst none
ervan in op het configuratiebestand.
[*.{cs,vb}]
dotnet_diagnostic.CA2355.severity = none
Zie Codeanalysewaarschuwingen onderdrukken voor meer informatie.
Voorbeelden van pseudocode
Schending
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);
}
}
Gerelateerde regels
CA2350: Zorg ervoor dat de invoer van DataTable.ReadXml() wordt vertrouwd
CA2351: Zorg ervoor dat de invoer van DataSet.ReadXml() wordt vertrouwd
CA2353: Onveilige gegevensset of gegevenstabel in serialiseerbare type
CA2356: Onveilige gegevensset of gegevenstabel in grafiek met webdeserialized objecten