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 causa un'interruzione |
Abilitato per impostazione predefinita in .NET 9 | No |
Causa
L'elaborazione di input XML non attendibile con XmlSchema.Read cui è stata creata un'istanza senza un XmlReader
oggetto può causare attacchi Denial of Service, divulgazione di informazioni e richieste sul lato server falsi. 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 ProhibitDtd
proprietà e ProcessInlineSchema
impostata su false per impostazione predefinita in .NET Framework a partire dalla versione 4.0. Le altre opzioni, ad Stream
esempio , TextReader
e 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
oggetto con un sistema di risoluzione sicuro o con DTD e l'elaborazione di schemi inline XML disabilitati limitano questa operazione. 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);
}