CA2326: Keine anderen TypeNameHandling-Werte als None (Keine) verwenden

Eigenschaft Wert
Regel-ID CA2326
Titel Keine anderen TypeNameHandling-Werte als None (Keine) verwenden
Kategorie Security
Fix führt oder führt nicht zur Unterbrechung Nicht unterbrechend
Standardmäßig in .NET 8 aktiviert Nein

Ursache

Diese Regel wird ausgelöst, wenn eine der folgenden Bedingungen zutrifft:

Regelbeschreibung

Unsichere Deserialisierer sind beim Deserialisieren nicht vertrauenswürdiger Daten anfällig. Ein Angreifer könnte den serialisierten Daten unerwartete Datentypen hinzufügen, um Objekte mit schädlichen Auswirkungen einschleusen. Ein Angriff auf einen unsicheren Deserialisierer könnte z. B. Befehle auf dem dahinterliegenden Betriebssystem ausführen, über das Netzwerk kommunizieren oder Dateien löschen.

Diese Regel ermittelt Newtonsoft.Json.TypeNameHandling-Werte ungleich None. Wenn die Deserialisierung nur erfolgen soll, falls Newtonsoft.Json.Serialization.ISerializationBinder für die Einschränkung deserialisierter Typen festgelegt ist, deaktivieren Sie diese Regeln, und aktivieren Sie stattdessen die Regeln CA2327, CA2328, CA2329 und CA2330.

Behandeln von Verstößen

Wann sollten Warnungen unterdrückt werden?

Eine Warnung aus dieser Regel kann sicher unterdrückt werden, wenn Folgendes gilt:

  • Sie wissen, dass die Eingabe vertrauenswürdig ist. Berücksichtigen Sie, dass sich die Vertrauensstellungsgrenze und Datenflüsse Ihrer Anwendung im Laufe der Zeit ändern können.
  • Sie haben eine der Sicherheitsmaßnahmen unter Behandeln von Verstößen ergriffen.

Unterdrücken einer Warnung

Um nur eine einzelne Verletzung zu unterdrücken, fügen Sie der Quelldatei Präprozessoranweisungen hinzu, um die Regel zu deaktivieren und dann wieder zu aktivieren.

#pragma warning disable CA2326
// The code that's violating the rule is on this line.
#pragma warning restore CA2326

Um die Regel für eine Datei, einen Ordner oder ein Projekt zu deaktivieren, legen Sie den Schweregrad in der Konfigurationsdatei auf none fest.

[*.{cs,vb}]
dotnet_diagnostic.CA2326.severity = none

Weitere Informationen finden Sie unter Vorgehensweise: Unterdrücken von Codeanalyse-Warnungen.

Pseudocodebeispiele

Verletzung

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ösung

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: Keine unsichere JsonSerializerSettings-Klasse verwenden

CA2328: Sicherstellen, dass JsonSerializerSettings sicher ist

CA2329: Nicht mit JsonSerializer mit unsicherer Konfiguration deserialisieren

CA2330: Sicherstellen, dass JsonSerializer eine sichere Konfiguration bei der Deserialisierung verwendet