CA2355: Unsafe DataSet o DataTable in un oggetto grafico deserializzato
Proprietà | valore |
---|---|
ID regola | CA2355 |
Titolo | Elemento DataSet o DataTable non sicuro nel grafico di oggetti deserializzato |
Categoria | Sicurezza |
Correzione che causa un'interruzione o un'interruzione | Nessuna interruzione |
Abilitato per impostazione predefinita in .NET 8 | No |
Causa
Deserializzazione quando il grafico a oggetti del tipo sottoposto a cast o specificato può includere un DataSet oggetto o DataTable.
Questa regola usa un approccio diverso a una regola simile, CA2353: Unsafe DataSet o DataTable nel tipo serializzabile.
Il tipo sottoposto a cast o specificato viene valutato quando:
- Inizializzazione di un DataContractSerializer oggetto
- Inizializzazione di un DataContractJsonSerializer oggetto
- Inizializzazione di un XmlSerializer oggetto
- Richiamare JavaScriptSerializer.Deserialize
- Richiamare JavaScriptSerializer.DeserializeObject
- Richiamare XmlSerializer.FromTypes
- Richiamo di Newtonsoft Json.NET JsonSerializer.Deserialize
- Richiamo di Newtonsoft Json.NET JsonConvert.DeserializeObject
Descrizione regola
Quando si deserializzare l'input non attendibile con BinaryFormatter e l'oggetto grafico deserializzato contiene un DataSet oggetto o DataTable, un utente malintenzionato può creare un payload dannoso per eseguire un attacco Denial of Service. Potrebbero verificarsi vulnerabilità sconosciute per l'esecuzione del codice remoto.
Per altre informazioni, vedere Linee guida per la sicurezza di DataSet e DataTable.
Come correggere le violazioni
- Se possibile, usare Entity Framework anziché DataSet e DataTable.
- 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.
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 CA2355
// The code that's violating the rule is on this line.
#pragma warning restore CA2355
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.CA2355.severity = none
Per altre informazioni, vedere Come eliminare gli avvisi di analisi del codice.
Esempi di pseudo-codice
Violazione
using System.Data;
using System.IO;
using System.Runtime.Serialization;
[Serializable]
public class MyClass
{
public MyOtherClass OtherClass { get; set; }
}
[Serializable]
public class MyOtherClass
{
private DataSet myDataSet;
}
public class ExampleClass
{
public MyClass Deserialize(Stream stream)
{
BinaryFormatter bf = new BinaryFormatter();
return (MyClass) bf.Deserialize(stream);
}
}
Regole correlate
CA2350: Verificare che l'input di DataTable.ReadXml()sia attendibile
CA2351: Verificare che l'input di DataSet.ReadXml()sia attendibile
CA2353: Unsafe DataSet o DataTable in tipo serializzabile
CA2356: Unsafe DataSet o DataTable in web deserialized object graph