Partilhar via


CA5366: Usar XmlReader para DataSet Read XML

Propriedade valor
ID da regra CA5366
Cargo Usar XmlReader para DataSet Read XML
Categoria Segurança
A correção está quebrando ou não quebrando Sem quebra
Habilitado por padrão no .NET 8 Não

Causa

Uma definição de tipo de documento (DTD) define a estrutura e os elementos legais e atributos de um documento XML. Referir-se a um DTD de um recurso externo pode causar potenciais ataques de negação de serviço (DoS). A maioria dos leitores não pode desativar o processamento DTD e restringir o carregamento de referências externas, exceto para System.Xml.XmlReader. O uso desses outros leitores para carregar XML por um dos seguintes métodos aciona essa regra:

Descrição da regra

Usar um para ler XML com dados não confiáveis pode carregar referências externas perigosas, que devem ser restringidas usando um com um System.Data.DataSetXmlReader resolvedor seguro ou com o processamento DTD desativado.

Como corrigir violações

Use XmlReader ou suas classes derivadas para ler XML.

Quando suprimir avisos

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

Suprimir um aviso

Se você quiser apenas suprimir uma única violação, adicione diretivas de pré-processador ao seu arquivo de origem para desativar e, em seguida, reativar 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 de um arquivo, pasta ou projeto, defina sua gravidade como none no arquivo de configuração.

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

Para obter mais informações, consulte 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)));
    }
}