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