Udostępnij za pośrednictwem


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