Partilhar via


CA5370: Usar XmlReader para validar o leitor

Property valor
ID da regra CA5370
Título Usar XmlReader para validar o leitor
Categoria Segurança
A correção está quebrando ou não quebrando Sem quebra
Habilitado por padrão no .NET 9 Não

Motivo

Validar a entrada XML não confiável com a classe instanciada XmlValidatingReader sem um XmlReader objeto pode potencialmente levar à 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. Apenas com XmlReader é possível desativar o DTD. Processamento de esquema XML embutido como XmlReader tem a ProhibitDtd propriedade e ProcessInlineSchema definida 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 desativado. Esta regra deteta o código que usa a XmlValidatingReader classe sem XmlReader como um parâmetro do construtor.

Como corrigir violações

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

Quando suprimir avisos

Você pode potencialmente suprimir esse aviso se o XmlValidatingReader for sempre usado para validar XML que vem de uma fonte confiável e, portanto, não pode ser adulterado.

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

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

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

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