Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
| 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)conProhibitDtdle proprietà eProcessInlineSchemaimpostate sufalse. - 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);
}