Compartilhar via


CA5370: Usar o XmlReader para validar o leitor

Property Valor
ID da regra CA5370
Título Usar o XmlReader para validar o leitor
Categoria Segurança
Correção interruptiva ou sem interrupção Sem interrupção
Habilitado por padrão no .NET 8 Não

Causa

Validar a entrada XML não confiável com a classe XmlValidatingReader instanciada sem um objeto XmlReader poderá resultar em negação de serviço, divulgação de informações e falsificação de solicitação do lado do servidor. Esses ataques são habilitados por DTD não confiável e processamento de esquema XML, o que permite a inclusão de bombas XML e entidades externas mal-intencionadas no XML. Somente com XmlReader é possível desabilitar o DTD. O processamento do esquema embutido XML como XmlReader tem as propriedades ProhibitDtd e ProcessInlineSchema definidas como false por padrão no .NET Framework a partir da versão 4.0.

Descrição da regra

O processamento de esquemas DTD e XML não confiáveis pode permitir o carregamento de referências externas perigosas. Esse carregamento perigoso pode ser restringido usando um XmlReader com um resolvedor seguro ou com o processamento de esquema embutido DTD e XML desabilitado. Essa regra detecta o código que usa a classe XmlValidatingReader sem XmlReader como um parâmetro de construtor.

Como corrigir violações

  • Use XmlValidatingReader(XmlReader) com as propriedades ProhibitDtd e ProcessInlineSchema definidas como false.
  • A partir .NET Framework 2.0, XmlValidatingReader é considerado obsoleto. Você pode instanciar um leitor de validação com XmlReader.Create.

Quando suprimir avisos

Você poderá suprimir esse aviso se o XmlValidatingReader sempre for utilizado para validar o XML proveniente de uma fonte confiável e, portanto, não poderá ser adulterado.

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

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.CA5370.severity = none

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

Exemplos de pseudocódigo

Violação

O exemplo de pseudocódigo a seguir ilustra o padrão detectado por essa regra. O tipo do primeiro parâmetro de XmlValidatingReader.XmlValidatingReader() não éXmlReader.

using System;
using System.IO;
using System.Xml;
...
public void TestMethod(Stream xmlFragment, XmlNodeType fragType, XmlParserContext context)
{
    var obj = new XmlValidatingReader(xmlFragment, fragType, context);
}

Solução

using System;
using System.Xml;
...
public void TestMethod(XmlReader xmlReader)
{
    var obj = new XmlValidatingReader(xmlReader);
}