Udostępnij za pośrednictwem


CA3061: Nie dodawaj schematu według adresu URL

Właściwości Wartość
Identyfikator reguły CA3061
Tytuł Nie dodawaj schematu według adresu URL
Kategoria Bezpieczeństwo
Poprawka powodująca niezgodność lub niezgodność Niezgodność
Domyślnie włączone na platformie .NET 9 Nie.

Przyczyna

Przeciążenie służy XmlUrlResolver do określania XmlSchemaCollection.Add(String, String) zewnętrznego schematu XML w postaci identyfikatora URI. Jeśli ciąg identyfikatora URI jest skażony, może to prowadzić do analizowania złośliwego schematu XML, co umożliwia włączenie bomb XML i złośliwych jednostek zewnętrznych. Może to umożliwić złośliwemu atakującemu przeprowadzenie ataku typu "odmowa usługi", ujawnienie informacji lub fałszerzowanie żądania po stronie serwera.

Opis reguły

Nie używaj niebezpiecznego Add przeciążenia metody, ponieważ może to spowodować niebezpieczne odwołania zewnętrzne.

Jak naprawić naruszenia

  • Nie używaj polecenia XmlSchemaCollection.Add(String, String).

Kiedy pomijać ostrzeżenia

Pomiń tę regułę, jeśli masz pewność, że kod XML nie rozwiąże niebezpiecznych odwołań zewnętrznych.

Pomijanie ostrzeżenia

Jeśli chcesz po prostu pominąć pojedyncze naruszenie, dodaj dyrektywy preprocesora do pliku źródłowego, aby wyłączyć, a następnie ponownie włączyć regułę.

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

Aby wyłączyć regułę dla pliku, folderu lub projektu, ustaw jego ważność na none w pliku konfiguracji.

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

Aby uzyskać więcej informacji, zobacz Jak pominąć ostrzeżenia dotyczące analizy kodu.

Przykłady przykładów kodu przykładowego

Naruszenie

Poniższy przykład pseudo-kodu ilustruje wzorzec wykryty przez tę regułę. Typ drugiego parametru to string.

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

Rozwiązanie

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