CA3061: Nepřidávejte schéma podle adresy URL

Vlastnost Hodnota
ID pravidla CA3061
Název Nepřidávat schéma podle adresy URL
Kategorie Zabezpečení
Oprava, která může být destruktivní nebo nedestruktivní Nezlomitelný
Povoleno ve výchozím nastavení v .NET 10 Ne
Příslušné jazyky C# a Visual Basic

Příčina

Přetížení XmlSchemaCollection.Add(String, String) využívá XmlUrlResolver ke specifikaci externího XML schématu ve formě URI. Pokud je řetězec identifikátoru URI znečištěn, může vést k parsování škodlivého schématu XML, které umožňuje zahrnutí bomb XML a škodlivých externích entit. To by mohlo útočníkovi se zlými úmysly umožnit provést útok na odepření služby, zpřístupnění informací nebo útok pomocí podvržení serverového požadavku.

Popis pravidla

Nepoužívejte nebezpečné přetížení Add metody, protože může způsobit nebezpečné externí odkazy.

Jak opravit porušení

  • Nepoužívejte XmlSchemaCollection.Add(String, String).

Kdy potlačit upozornění

Potlačte toto pravidlo, pokud jste si jisti, že váš XML neřeší nebezpečné externí odkazy.

Potlačení upozornění

Pokud chcete pouze potlačit jedno porušení, přidejte do zdrojového souboru direktivy preprocesoru, abyste pravidlo zakázali a znovu povolili.

#pragma warning disable CA3061
// The code that's violating the rule is on this line.
#pragma warning restore CA3061

Pokud chcete pravidlo pro soubor, složku nebo projekt zakázat, nastavte jeho závažnost v none konfiguračním souboru.

[*.{cs,vb}]
dotnet_diagnostic.CA3061.severity = none

Další informace naleznete v tématu Jak potlačit upozornění analýzy kódu.

Příklady pseudokódu

Porušení

Následující ukázka pseudokódu znázorňuje vzor zjištěný tímto pravidlem. Druhý typ parametru je string.

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

Řešení

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)));