Condividi tramite


CA5371: Usare XmlReader per la lettura dello schema

Proprietà valore
ID regola CA5371
Title Usa XmlReader per la lettura dello schema
Categoria Sicurezza
La correzione causa un'interruzione o meno Non rompente
Abilitato per impostazione predefinita in .NET 10 No
Linguaggi applicabili C# e Visual Basic

Causa

L'elaborazione di input XML non attendibile con XmlSchema.Read istanziato senza un oggetto XmlReader può causare attacchi di Denial of Service, divulgazione di informazioni e attacchi di falsificazione di richieste lato server. Questi attacchi sono abilitati dall'elaborazione di DTD e XML Schema non attendibili, che consente l'inclusione di bombe XML e entità esterne dannose nel codice XML. Solo con XmlReader è possibile disabilitare DTD. L'elaborazione di XML Schema inline come XmlReader ha la proprietà ProhibitDtd e la proprietà ProcessInlineSchema impostate su false per impostazione predefinita nel .NET Framework a partire dalla versione 4.0. Le altre opzioni, ad Streamesempio , TextReadere XmlSerializationReader non possono disabilitare l'elaborazione DTD.

Descrizione regola

L'elaborazione di DTD e XML Schema non attendibili può consentire il caricamento di riferimenti esterni pericolosi. L'uso di un XmlReader con un resolver sicuro o con DTD e l'elaborazione di schemi inline XML disabilitati limita quest'azione. Questa regola rileva il codice che usa il XmlSchema.Read metodo senza XmlReader come parametro.

Come correggere le violazioni

Usare XmlSchema.Read(XmlReader, *) gli overload.

Quando eliminare gli avvisi

È possibile eliminare questo avviso se il XmlSchema.Read metodo viene sempre usato per elaborare xml proveniente da un'origine attendibile e pertanto non può essere manomesso.

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

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

Per altre informazioni, vedere Come eliminare gli avvisi di analisi del codice.

Esempi di pseudo-codice

Violazione

Nell'esempio di pseudo-codice seguente viene illustrato il modello rilevato da questa regola. Il tipo del primo parametro di XmlSchema.Read non è XmlReader.

using System.IO;
using System.Xml.Schema;
...
public void TestMethod(Stream stream, ValidationEventHandler validationEventHandler)
{
    XmlSchema.Read(stream, validationEventHandler);
}

Soluzione

using System.IO;
using System.Xml.Schema;
...
public void TestMethod(XmlReader reader, ValidationEventHandler validationEventHandler)
{
    XmlSchema.Read(reader, validationEventHandler);
}