CA3061: Non aggiungere lo schema in base all'URL

Proprietà valore
ID regola CA3061
Titolo Non aggiungere lo schema in base all'URL
Categoria Sicurezza
Correzione che causa un'interruzione o un'interruzione Nessuna interruzione
Abilitato per impostazione predefinita in .NET 8 No

Causa

L'overload XmlUrlResolver di XmlSchemaCollection.Add(String, String) usa per specificare xml schema esterno sotto forma di URI. Se la stringa URI è tainted, può causare l'analisi di un XML Schema dannoso, che consente l'inclusione di bombe XML ed entità esterne dannose. Ciò potrebbe consentire a un utente malintenzionato di eseguire un attacco Denial of Service, divulgazione di informazioni o richiesta sul lato server falsa.

Descrizione regola

Non usare l'overload unsafe del Add metodo perché può causare riferimenti esterni pericolosi.

Come correggere le violazioni

  • Non usare XmlSchemaCollection.Add(String, String).

Quando eliminare gli avvisi

Eliminare questa regola se si è certi che il codice XML non risolve riferimenti esterni pericolosi.

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

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.CA3061.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 secondo parametro è string.

using System;
using System.Xml.Schema;
...
XmlSchemaCollection xsc = new XmlSchemaCollection();
xsc.Add("urn: bookstore - schema", "books.xsd");

Soluzione

using System;
using System.IO;
using System.Xml;
using System.Xml.Schema;
...
XmlSchemaCollection xsc = new XmlSchemaCollection();
xsc.Add("urn: bookstore - schema", new XmlTextReader(new FileStream(""xmlFilename"", FileMode.Open)));