CA2354: Onveilige gegevensset of gegevenstabel in de deserialized objectgrafiek kan kwetsbaar zijn voor aanvallen op het uitvoeren van externe code
Eigenschappen | Weergegeven als |
---|---|
Regel-id | CA2354 |
Titel | Onveilige DataSet of DataTable in deserialized objectgrafiek kan kwetsbaar zijn voor aanvallen op uitvoering van externe code |
Categorie | Beveiliging |
Oplossing is brekend of niet-brekend | Niet-brekend |
Standaard ingeschakeld in .NET 8 | Nee |
Oorzaak
Deserialiseren met een System.Runtime.Serialization.IFormatter geserialiseerd objectdiagram en de objectgrafiek van het gecaste type kan een DataSet of DataTable.
Deze regel maakt gebruik van een andere benadering van een vergelijkbare regel, CA2352: Onveilige gegevensset of gegevenstabel in serializeerbaar type kan kwetsbaar zijn voor aanvallen op uitvoering van externe code.
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 aanval op de uitvoering van externe code uit te voeren.
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 CA2354
// The code that's violating the rule is on this line.
#pragma warning restore CA2354
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.CA2354.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
CA2355: Onveilige gegevensset of gegevenstabel in de grafiek met gedeserialiseerde objecten
CA2356: Onveilige gegevensset of gegevenstabel in grafiek met webdeserialized objecten