Compartilhar via


CA5366: Usar XmlReader para XML da leitura do conjunto de dados

Property Valor
ID da regra CA5366
Título Usar XmlReader para XML da leitura do conjunto de dados
Categoria Segurança
Correção interruptiva ou sem interrupção Sem interrupção
Habilitado por padrão no .NET 8 Não

Causa

Uma DTD (Definição de Tipo de Documento) define a estrutura e os elementos e atributos legais de um documento XML. Fazer referência a um DTD de um recurso externo pode causar possíveis ataques de DoS (Negação de Serviço). A maioria dos leitores não pode desabilitar o processamento de DTD e restringir o carregamento de referências externas, exceto para System.Xml.XmlReader. Usar esses outros leitores para carregar XML por um dos seguintes métodos dispara esta regra:

Descrição da regra

O uso de System.Data.DataSet para ler XML contendo dados não confiáveis pode carregar referências externas perigosas, que devem ser restringidas usando um XmlReader com um resolvedor seguro ou com o processamento de DTD desabilitado.

Como corrigir violações

Use XmlReader ou suas classes derivadas para ler XML.

Quando suprimir avisos

Suprime um aviso dessa regra ao lidar com uma fonte de dados confiável.

Suprimir um aviso

Para suprimir apenas uma violação, adicione diretivas de pré-processador ao arquivo de origem a fim de desabilitar e, em seguida, reabilitar a regra.

#pragma warning disable CA5366
// The code that's violating the rule is on this line.
#pragma warning restore CA5366

Para desabilitar a regra em um arquivo, uma pasta ou um projeto, defina a severidade como none no arquivo de configuração.

[*.{cs,vb}]
dotnet_diagnostic.CA5366.severity = none

Para obter mais informações, confira Como suprimir avisos de análise de código.

Exemplos de pseudocódigo

Violação

using System.Data;
using System.IO;

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

Solução

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