Share via


CA2326: Använd inte andra TypeNameHandling-värden än Ingen

Property Värde
Regel-ID CA2326
Rubrik 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 8 Nej

Orsak

Den här regeln utlöses när något av följande villkor uppfylls:

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

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

CA2327: Använd inte osäker JsonSerializer Inställningar

CA2328: Kontrollera att JsonSerializer Inställningar är säkra

CA2329: Deserialisera inte med JsonSerializer med en osäker konfiguration

CA2330: Kontrollera att JsonSerializer har en säker konfiguration vid deserialisering