Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
| Eigenschap | Waarde |
|---|---|
| Regel-id | CA2355 |
| Titel | Onveilige gegevensset of gegevenstabel in de gedeserialiseerde objectgrafiek |
| Categorie | Beveiliging |
| Fix kan brekend of niet-brekend zijn | Niet-brekend |
| Standaard ingeschakeld in .NET 10 | Nee |
| Toepasselijke talen | C# en Visual Basic |
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 gecaste of opgegeven type wordt geëvalueerd wanneer:
- Een object initialiseren DataContractSerializer
- Een object initialiseren DataContractJsonSerializer
- Een object initialiseren XmlSerializer
- Aanroepen JavaScriptSerializer.Deserialize
- Aanroepen JavaScriptSerializer.DeserializeObject
- Aanroepen 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 als de gedeserialiseerde objectgrafiek een DataSet of DataTable bevat, kan een aanvaller een kwaadaardige payload 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.
Hoe schendingen op te lossen
- Gebruik, indien mogelijk, Entity Framework in plaats DataSet van en DataTable.
- Maak de geserialiseerde gegevens manipulatiebestendig. Na serialisatie tekent u de geserialiseerde gegevens cryptografisch. Valideer de cryptografische handtekening voordat deserialisatie plaatsvindt. 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 betrouwbaar is. 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 voor meer informatie Hoe codeanalysewaarschuwingen te onderdrukken.
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() betrouwbaar is
CA2353: Onveilige gegevensset of gegevenstabel in serialiseerbare type
CA2356: Onveilige gegevensset of gegevenstabel in grafiek met webdeserialized objecten