Udostępnij za pośrednictwem


CA5366: Użyj elementu XmlReader dla elementu DataSet Read XML

Właściwości Wartość
Identyfikator reguły CA5366
Tytuł Użyj czytnika XmlReader na potrzeby pliku XML odczytu zestawu danych
Kategoria Bezpieczeństwo
Poprawka powodująca niezgodność lub niezgodność Niezgodność
Domyślnie włączone na platformie .NET 9 Nie.

Przyczyna

Definicja typu dokumentu (DTD) definiuje strukturę oraz elementy prawne i atrybuty dokumentu XML. Odwołanie do dtD z zasobu zewnętrznego może spowodować potencjalne ataki typu "odmowa usługi" (DoS). Większość czytelników nie może wyłączyć przetwarzania DTD i ograniczyć ładowanie odwołań zewnętrznych z wyjątkiem System.Xml.XmlReader. Za pomocą tych innych czytników można załadować kod XML za pomocą jednej z następujących metod wyzwala tę regułę:

Opis reguły

Użycie elementu System.Data.DataSet do odczytu kodu XML z niezaufanymi danymi może ładować niebezpieczne odwołania zewnętrzne, które powinny być ograniczone za pomocą modułu XmlReader z bezpiecznym rozpoznawaniem lub z wyłączonym przetwarzaniem DTD.

Jak naprawić naruszenia

Użyj XmlReader lub jej klas pochodnych, aby odczytać kod XML.

Kiedy pomijać ostrzeżenia

Pomiń ostrzeżenie z tej reguły podczas pracy z zaufanym źródłem danych.

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 CA5366
// The code that's violating the rule is on this line.
#pragma warning restore CA5366

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

[*.{cs,vb}]
dotnet_diagnostic.CA5366.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.Data;
using System.IO;

public class ExampleClass
{
    public void ExampleMethod()
    {
        new DataSet().ReadXml(new FileStream("xmlFilename", FileMode.Open));
    }
}

Rozwiązanie

using System.Data;
using System.IO;
using System.Xml;

public class ExampleClass
{
    public void ExampleMethod()
    {
        new DataSet().ReadXml(new XmlTextReader(new FileStream("xmlFilename", FileMode.Open)));
    }
}