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 9 | Nee |
Oorzaak
Deze regel wordt geactiveerd wanneer aan een van de volgende voorwaarden wordt voldaan:
- Er wordt naar een opsommingswaarde Newtonsoft.Json.TypeNameHandling verwezen, behalve naar
None
. - Een geheel getal dat een niet-nulwaarde vertegenwoordigt, wordt toegewezen aan een TypeNameHandling-variabele .
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
- Gebruik indien mogelijk de waarde van
None
TypeNameHandling. - 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.
- Beperk gedeserialiseerde typen. Implementeer een aangepaste Newtonsoft.Json.Serialization.ISerializationBinder. Voordat u deserialiseren met Json.NET, moet u ervoor zorgen dat uw aangepaste ISerializationBinder is opgegeven in de eigenschap Newtonsoft.JsonSerializerSettings.SerializationBinder. In de overschreven methode Newtonsoft.Json.Serialization.ISerializationBinder.BindToType , als het type onverwacht is, retourneert
null
of genereert u een uitzondering om deserialisatie te stoppen.- Als u gedeserialiseerde typen beperkt, kunt u deze regel uitschakelen en regels CA2327, CA2328, CA2329 en CA2330 inschakelen. Regels CA2327, CA2328, CA2329 en CA2330 helpen ervoor te zorgen dat u een ISerializationBinder gebruikt bij het gebruik van andere TypeNameHandling-waarden dan
None
.
- Als u gedeserialiseerde typen beperkt, kunt u deze regel uitschakelen en regels CA2327, CA2328, CA2329 en CA2330 inschakelen. Regels CA2327, CA2328, CA2329 en CA2330 helpen ervoor te zorgen dat u een ISerializationBinder gebruikt bij het gebruik van andere TypeNameHandling-waarden dan
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
Gerelateerde regels
CA2327: Gebruik geen onveilige JsonSerializerSettings
CA2328: Zorg ervoor dat JsonSerializerSettings veilig is
CA2329: Niet deserialiseren met JsonSerializer met behulp van een onveilige configuratie
CA2330: Zorg ervoor dat JsonSerializer een beveiligde configuratie heeft bij het deserialiseren