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