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 propriedadesProhibitDtd
eProcessInlineSchema
definidas comofalse
. - 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);
}