CA3077: Niezabezpieczone przetwarzanie w elemencie Design interfejsu API, dokumencie XML i czytniku tekstu dla kodu XML
Właściwości | Wartość |
---|---|
Identyfikator reguły | CA3077 |
Tytuł | Niezabezpieczone przetwarzanie w elemencie Design interfejsu API, dokumencie XML i czytniku tekstu dla kodu XML |
Kategoria | Bezpieczeństwo |
Poprawka powodująca niezgodność lub niezgodność | Niezgodność |
Domyślnie włączone na platformie .NET 9 | Nie. |
Przyczyna
Podczas projektowania interfejsu API pochodzącego z xmlDocument i XMLTextReader należy pamiętać o DtdProcessing. Używanie niezabezpieczonych wystąpień DTDProcessing w przypadku odwoływania się do zewnętrznych źródeł jednostki lub ustawiania niezabezpieczonych wartości w kodzie XML może prowadzić do ujawnienia informacji.
Opis reguły
Definicja typu dokumentu (DTD) jest jednym z dwóch sposobów, w jaki analizator XML może określić ważność dokumentu, zgodnie z definicją w extensible Markup Language (XML) World Wide Web Consortium (W3C) Extensible Markup Language (XML) 1.0. Ta reguła szuka właściwości i wystąpień, w których akceptowane są niezaufane dane, aby ostrzegać deweloperów przed potencjalnymi zagrożeniami dotyczącymi ujawniania informacji, co może prowadzić do ataków typu "odmowa usługi" (DoS ). Ta reguła jest wyzwalana, gdy:
XmlDocument lub XmlTextReader klasy używają domyślnych wartości rozpoznawania nazw dla przetwarzania DTD.
Żaden konstruktor nie jest zdefiniowany dla klas pochodnych XmlDocument lub XmlTextReader lub nie jest używana żadna bezpieczna wartość dla klasy XmlResolver.
Jak naprawić naruszenia
Przechwyć i przetworzyć wszystkie wyjątki XmlTextReader prawidłowo, aby uniknąć ujawnienia informacji o ścieżce .
Użyj XmlSecureResolverzamiast xmlResolver, aby ograniczyć zasoby, do których może uzyskać dostęp xmlTextReader.
Kiedy pomijać ostrzeżenia
Jeśli nie masz pewności, że dane wejściowe są znane z zaufanego źródła, nie pomijaj reguły z tego ostrzeżenia.
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 CA3077
// The code that's violating the rule is on this line.
#pragma warning restore CA3077
Aby wyłączyć regułę dla pliku, folderu lub projektu, ustaw jego ważność na none
w pliku konfiguracji.
[*.{cs,vb}]
dotnet_diagnostic.CA3077.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
using System;
using System.Xml;
namespace TestNamespace
{
class TestClass : XmlDocument
{
public TestClass () {} // warn
}
class TestClass2 : XmlTextReader
{
public TestClass2() // warn
{
}
}
}
Rozwiązanie
using System;
using System.Xml;
namespace TestNamespace
{
class TestClass : XmlDocument
{
public TestClass ()
{
XmlResolver = null;
}
}
class TestClass2 : XmlTextReader
{
public TestClass2()
{
XmlResolver = null;
}
}
}