Share via


CA2326: Gebruik geen TypeNameHandling-waarden dan Geen

Eigenschappen Weergegeven als
Regel-id CA2326
Titel Gebruik geen andere TypeNameHandling-waarden dan Geen
Categorie Beveiliging
Oplossing is brekend of niet-brekend Niet-brekend
Standaard ingeschakeld in .NET 8 Nee

Oorzaak

Deze regel wordt geactiveerd wanneer aan een van de volgende voorwaarden wordt voldaan:

Beschrijving van regel

Onveilige deserializers zijn kwetsbaar wanneer niet-vertrouwde gegevens worden gedeserialiseerd. Een aanvaller kan de geserialiseerde gegevens wijzigen zodat onverwachte typen worden opgenomen om objecten met schadelijke bijwerkingen te injecteren. Een aanval op een onveilig deserializer kan bijvoorbeeld opdrachten uitvoeren op het onderliggende besturingssysteem, communiceren via het netwerk of bestanden verwijderen.

Deze regel vindt newtonsoft.Json.TypeNameHandling-waarden anders dan None. Als u alleen wilt deserialiseren wanneer een Newtonsoft.Json.Serialization.ISerializationBinder is opgegeven om gedeserialiseerde typen te beperken, schakelt u deze regel uit en schakelt u regels CA2327, CA2328, CA2329 en CA2330 in plaats daarvan in.

Schendingen oplossen

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 CA2326
// The code that's violating the rule is on this line.
#pragma warning restore CA2326

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.CA2326.severity = none

Zie Codeanalysewaarschuwingen onderdrukken voor meer informatie.

Voorbeelden van pseudocode

Schending

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

Oplossing

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: Gebruik geen onveilige JsonSerializer Instellingen

CA2328: Zorg ervoor dat JsonSerializer Instellingen veilig zijn

CA2329: Niet deserialiseren met JsonSerializer met behulp van een onveilige configuratie

CA2330: Zorg ervoor dat JsonSerializer een beveiligde configuratie heeft bij het deserialiseren