CA2326: Non usare i valori TypeNameHandling diversi da Nessuno
Proprietà | valore |
---|---|
ID regola | CA2326 |
Title | Non usare valori di TypeNameHandling diversi da None |
Categoria | Sicurezza |
La correzione causa un'interruzione o meno | Non causa un'interruzione |
Abilitato per impostazione predefinita in .NET 9 | No |
Causa
Questa regola viene attivata quando vengono soddisfatte una delle condizioni seguenti:
- Viene fatto riferimento a un valore di enumerazione Newtonsoft.Json.TypeNameHandling diverso da
None
. - Un valore intero che rappresenta un valore diverso da zero viene assegnato a una variabile TypeNameHandling .
Descrizione regola
I deserializzatori non sicuri sono vulnerabili durante la deserializzazione dei dati non attendibili. Un utente malintenzionato potrebbe modificare i dati serializzati in modo da includere tipi imprevisti per inserire oggetti con effetti collaterali dannosi. Un attacco a un deserializzatore non sicuro potrebbe, ad esempio, eseguire comandi nel sistema operativo sottostante, comunicare in rete o eliminare file.
Questa regola trova i valori Newtonsoft.Json.TypeNameHandling diversi da None
. Se si vuole deserializzare solo quando viene specificato un oggetto Newtonsoft.Json.Serialization.ISerializationBinder per limitare i tipi deserializzati, disabilitare questa regola e abilitare le regole CA2327, CA2328, CA2329 e CA2330 .
Come correggere le violazioni
- Se possibile, usare il valore di
None
TypeNameHandling. - Rendere i dati serializzati a prova di manomissione. Dopo la serializzazione, firmare in modo crittografico i dati serializzati. Prima della deserializzazione, convalidare la firma crittografica. Proteggere la chiave crittografica dalla divulgazione e dalla progettazione per le rotazioni delle chiavi.
- Limitare i tipi deserializzati. Implementare un oggetto Newtonsoft.Json.Serialization.ISerializationBinder personalizzato. Prima di deserializzare con Json.NET, verificare che la proprietà ISerializationBinder personalizzata sia specificata nella proprietà Newtonsoft.Json.JsonSerializerSettings.SerializationBinder. Nel metodo Newtonsoft.Json.Serialization.ISerializationBinder.BindToType sottoposto a override, se il tipo è imprevisto, restituire
null
o generare un'eccezione per arrestare la deserializzazione.- Se si limitano i tipi deserializzati, è possibile disabilitare questa regola e abilitare le regole CA2327, CA2328, CA2329 e CA2330. Le regole CA2327, CA2328, CA2329 e CA2330 consentono di usare un ISerializationBinder quando si usano valori TypeNameHandling diversi da
None
.
- Se si limitano i tipi deserializzati, è possibile disabilitare questa regola e abilitare le regole CA2327, CA2328, CA2329 e CA2330. Le regole CA2327, CA2328, CA2329 e CA2330 consentono di usare un ISerializationBinder quando si usano valori TypeNameHandling diversi da
Quando eliminare gli avvisi
È possibile eliminare un avviso da questa regola se:
- Si sa che l'input è attendibile. Si consideri che i limiti di attendibilità e i flussi di dati dell'applicazione possono cambiare nel tempo.
- È stata presa una delle precauzioni riportate in Come correggere le violazioni.
Eliminare un avviso
Se si vuole eliminare una singola violazione, aggiungere direttive del preprocessore al file di origine per disabilitare e quindi riabilitare la regola.
#pragma warning disable CA2326
// The code that's violating the rule is on this line.
#pragma warning restore CA2326
Per disabilitare la regola per un file, una cartella o un progetto, impostarne la gravità none
su nel file di configurazione.
[*.{cs,vb}]
dotnet_diagnostic.CA2326.severity = none
Per altre informazioni, vedere Come eliminare gli avvisi di analisi del codice.
Esempi di pseudo-codice
Violazione
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
Soluzione
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
Regole correlate
CA2327: Non usare JsonSerializerSettings non sicuro
CA2328: Assicurarsi che JsonSerializerSettings sia sicuro
CA2329: Non deserializzare con JsonSerializer usando una configurazione non sicura
CA2330: Assicurarsi che JsonSerializer abbia una configurazione sicura durante la deserializzazione