Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
| Właściwości | Wartość |
|---|---|
| Identyfikator reguły | CA3061 |
| Tytuł | Nie dodawaj schematu według adresu URL |
| Kategoria | Bezpieczeństwo |
| Poprawka łamiąca lub nienaruszająca | Niezgodność |
| Domyślnie włączone na platformie .NET 10 | Nie. |
| Zastosowane języki | C# i Visual Basic |
Przyczyna
Przeciążenie XmlSchemaCollection.Add(String, String) korzysta z XmlUrlResolver do określenia 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 przeciążenia metody Add, które jest niebezpieczne, ponieważ może to prowadzić do ryzykownych odwołań zewnętrznych.
Jak naprawić naruszenia
- Nie używaj
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 pseudokodu
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)));