CA2326: Använd inte andra TypeNameHandling-värden än Ingen
Property | Värde |
---|---|
Regel-ID | CA2326 |
Title | Använd inte andra TypeNameHandling-värden än Ingen |
Kategori | Säkerhet |
Korrigeringen är icke-bakåtkompatibel | Icke-icke-bryta |
Aktiverad som standard i .NET 9 | Nej |
Orsak
Den här regeln utlöses när något av följande villkor uppfylls:
- Ett Newtonsoft.Json.TypeNameHandling-uppräkningsvärde , annat än
None
, refereras till. - Ett heltalsvärde som representerar ett värde som inte är noll tilldelas till en TypeNameHandling-variabel .
Regelbeskrivning
Osäkra deserialiserare är sårbara när deserialisera ej betrodda data. En angripare kan ändra serialiserade data så att de innehåller oväntade typer för att mata in objekt med skadliga biverkningar. En attack mot en osäker deserialiserare kan till exempel köra kommandon på det underliggande operativsystemet, kommunicera via nätverket eller ta bort filer.
Den här regeln hittar andra Värden för Newtonsoft.Json.TypeNameHandling än None
. Om du bara vill deserialisera när en Newtonsoft.Json.Serialization.ISerializationBinder har angetts för att begränsa deserialiserade typer inaktiverar du den här regeln och aktiverar reglerna CA2327, CA2328, CA2329 och CA2330 i stället.
Så här åtgärdar du överträdelser
- Använd TypeNameHandlings
None
värde om möjligt. - 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.
- Begränsa deserialiserade typer. Implementera en anpassad Newtonsoft.Json.Serialization.ISerializationBinder. Innan du deserialiserar med Json.NET kontrollerar du att din anpassade ISerializationBinder anges i egenskapen Newtonsoft.Json.JsonSerializerSettings.SerializationBinder . I den åsidosatta metoden Newtonsoft.Json.Serialization.ISerializationBinder.BindToType returnerar
null
eller utlöser du ett undantag för att stoppa deserialiseringen om typen är oväntad.- Om du begränsar deserialiserade typer kanske du vill inaktivera den här regeln och aktivera reglerna CA2327, CA2328, CA2329 och CA2330. Reglerna CA2327, CA2328, CA2329 och CA2330 hjälper dig att se till att du använder en ISerializationBinder när du använder andra TypeNameHandling-värden än
None
.
- Om du begränsar deserialiserade typer kanske du vill inaktivera den här regeln och aktivera reglerna CA2327, CA2328, CA2329 och CA2330. Reglerna CA2327, CA2328, CA2329 och CA2330 hjälper dig att se till att du använder en ISerializationBinder när du använder andra TypeNameHandling-värden än
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 CA2326
// The code that's violating the rule is on this line.
#pragma warning restore CA2326
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.CA2326.severity = none
Mer information finns i Så här utelämnar du kodanalysvarningar.
Exempel på pseudokod
Kränkning
using Newtonsoft.Json;
public class ExampleClass
{
public JsonSerializerSettings Settings { get; }
public ExampleClass()
{
Settings = new JsonSerializerSettings();
Settings.TypeNameHandling = TypeNameHandling.All; // CA2326 violation.
}
}
Imports Newtonsoft.Json
Public Class ExampleClass
Public ReadOnly Property Settings() As JsonSerializerSettings
Public Sub New()
Settings = New JsonSerializerSettings()
Settings.TypeNameHandling = TypeNameHandling.All ' CA2326 violation.
End Sub
End Class
Lösning
using Newtonsoft.Json;
public class ExampleClass
{
public JsonSerializerSettings Settings { get; }
public ExampleClass()
{
Settings = new JsonSerializerSettings();
// The default value of Settings.TypeNameHandling is TypeNameHandling.None.
}
}
Imports Newtonsoft.Json
Public Class ExampleClass
Public ReadOnly Property Settings() As JsonSerializerSettings
Public Sub New()
Settings = New JsonSerializerSettings()
' The default value of Settings.TypeNameHandling is TypeNameHandling.None.
End Sub
End Class
Relaterade regler
CA2327: Använd inte osäkra JsonSerializerSettings
CA2328: Se till att JsonSerializerSettings är säkra
CA2329: Deserialisera inte med JsonSerializer med en osäker konfiguration
CA2330: Kontrollera att JsonSerializer har en säker konfiguration vid deserialisering