Condividi tramite


CA5370: Usare XmlReader per convalidare il lettore

Proprietà valore
ID regola CA5370
Title Usare XmlReader per la convalida del lettore
Categoria Sicurezza
La correzione causa un'interruzione o meno Non causa un'interruzione
Abilitato per impostazione predefinita in .NET 10 No

Causa

La convalida dell'input XML non attendibile con la XmlValidatingReader classe creata senza un XmlReader oggetto può potenzialmente causare la negazione del servizio, la divulgazione di informazioni e la richiesta sul 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 ProhibitDtd proprietà e ProcessInlineSchema impostata su false per impostazione predefinita in .NET Framework a partire dalla versione 4.0.

Descrizione regola

L'elaborazione di DTD e XML Schema non attendibili può consentire il caricamento di riferimenti esterni pericolosi. Questo caricamento pericoloso può essere limitato tramite un XmlReader sistema di risoluzione sicuro o con DTD e l'elaborazione dello schema inline XML disabilitata. Questa regola rileva il codice che usa la XmlValidatingReader classe senza XmlReader come parametro del costruttore.

Come correggere le violazioni

  • Usare XmlValidatingReader(XmlReader) con ProhibitDtd le proprietà e ProcessInlineSchema impostate su false.
  • A partire da .NET Framework 2.0, XmlValidatingReader è considerato obsoleto. È possibile creare un'istanza di un lettore di convalida con XmlReader.Create.

Quando eliminare gli avvisi

È possibile eliminare potenzialmente questo avviso se l'oggetto XmlValidatingReader viene sempre utilizzato per convalidare il codice 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 CA5370
// The code that's violating the rule is on this line.
#pragma warning restore CA5370

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.CA5370.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 XmlValidatingReader.XmlValidatingReader() non XmlReaderè .

using System;
using System.IO;
using System.Xml;
...
public void TestMethod(Stream xmlFragment, XmlNodeType fragType, XmlParserContext context)
{
    var obj = new XmlValidatingReader(xmlFragment, fragType, context);
}

Soluzione

using System;
using System.Xml;
...
public void TestMethod(XmlReader xmlReader)
{
    var obj = new XmlValidatingReader(xmlReader);
}