Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
| Property | Valor |
|---|---|
| ID da regra | CA5371 |
| Título | Usar o XmlReader para a leitura do esquema |
| Categoria | Segurança |
| Correção interruptiva ou sem interrupção | Sem interrupção |
| Habilitado por padrão no .NET 10 | Não |
Causa
O processamento de entrada XML não confiável com XmlSchema.Read instanciado sem um objeto XmlReader poderá resultar em ataques de 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 XML embutido como XmlReader tem as propriedades ProhibitDtd e ProcessInlineSchema definidas como falso por padrão no .NET Framework da versão 4.0 em diante. As outras opções, como Stream, TextReader e XmlSerializationReader não podem desabilitar o processamento de DTD.
Descrição da regra
O processamento de esquemas DTD e XML não confiáveis pode permitir o carregamento de referências externas perigosas. Usar um XmlReader com um resolvedor seguro ou com DTD e processamento de esquema em linha XML desabilitado aplicará a restrição. Essa regra detectará o código que usar o método XmlSchema.Read sem um parâmetro XmlReader.
Como corrigir violações
Use XmlSchema.Read(XmlReader, *) sobrecargas.
Quando suprimir avisos
Você poderá suprimir esse aviso se o método XmlSchema.Read sempre for usado para processar 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 CA5371
// The code that's violating the rule is on this line.
#pragma warning restore CA5371
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.CA5371.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 XmlSchema.Read não éXmlReader.
using System.IO;
using System.Xml.Schema;
...
public void TestMethod(Stream stream, ValidationEventHandler validationEventHandler)
{
XmlSchema.Read(stream, validationEventHandler);
}
Solução
using System.IO;
using System.Xml.Schema;
...
public void TestMethod(XmlReader reader, ValidationEventHandler validationEventHandler)
{
XmlSchema.Read(reader, validationEventHandler);
}