CA2351: Verificare che l'input di DataSet.ReadXml()sia attendibile
Proprietà | valore |
---|---|
ID regola | CA2351 |
Title | Verificare che l'input di DataSet.ReadXml() sia attendibile |
Categoria | Sicurezza |
La correzione causa un'interruzione o meno | Non causa un'interruzione |
Abilitato per impostazione predefinita in .NET 9 | No |
Causa
Il DataSet.ReadXml metodo è stato chiamato o a cui si fa riferimento e non all'interno del codice generato automaticamente.
Questa regola classifica il codice generato automaticamente b:
- Essere all'interno di un metodo denominato
ReadXmlSerializable
. - Il
ReadXmlSerializable
metodo ha un oggetto System.Diagnostics.DebuggerNonUserCodeAttribute. - Il
ReadXmlSerializable
metodo si trova all'interno di un tipo con un oggetto System.ComponentModel.DesignerCategoryAttribute.
CA2361 è una regola simile, per quando DataSet.ReadXml viene visualizzata all'interno del codice generato automaticamente.
Descrizione regola
Quando si deserializza un oggetto DataSet con input non attendibile, un utente malintenzionato può creare input 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
- 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 CA2351
// The code that's violating the rule is on this line.
#pragma warning restore CA2351
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.CA2351.severity = none
Per altre informazioni, vedere Come eliminare gli avvisi di analisi del codice.
Esempi di pseudo-codice
Violazione
using System.Data;
public class ExampleClass
{
public DataSet MyDeserialize(string untrustedXml)
{
DataSet dt = new DataSet();
dt.ReadXml(untrustedXml);
}
}
Regole correlate
CA2350: Verificare che l'input di DataTable.ReadXml()sia attendibile
CA2352: Un elemento DataSet o DataTable non sicuro nel tipo serializzabile può essere vulnerabile agli attacchi di esecuzione di codice remoto
CA2353: Elemento DataSet o DataTable non sicuro in un tipo serializzabile
CA2355: Unsafe DataSet o DataTable in un oggetto grafico deserializzato
CA2356: Unsafe DataSet o DataTable in web deserialized object graph
CA2361: Assicurarsi che la classe generata automaticamente che contiene DataSet.ReadXml() non venga usata con dati non attendibili
CA2362: L'oggetto DataSet o DataTable non sicuro nel tipo serializzabile generato automaticamente può essere vulnerabile ad attacchi di tipo esecuzione di codice remoto