XmlReaderSettings.MaxCharactersFromEntities Propriedade

Definição

Obtém ou define um valor que indica o número máximo permitido de caracteres em um documento resultante da expansão de entidades.

public long MaxCharactersFromEntities { get; set; }

Valor da propriedade

Int64

O número máximo permitido de caracteres de entidades expandidas. O padrão é 0.

Exemplos

O código a seguir define essa propriedade e tenta analisar um documento que contém uma entidade que se expande para um tamanho maior que o limite definido. Em um cenário do mundo real, você definiria esse limite como um valor grande o suficiente para lidar com documentos válidos, mas pequeno o suficiente para limitar a ameaça de documentos mal-intencionados.

string markup =  
@"<!DOCTYPE Root [  
  <!ENTITY anEntity ""Expands to more than 30 characters"">  
  <!ELEMENT Root (#PCDATA)>  
]>  
<Root>Content &anEntity;</Root>";  

XmlReaderSettings settings = new XmlReaderSettings();  
settings.DtdProcessing = DtdProcessing.Parse;  
settings.ValidationType = ValidationType.DTD;  
settings.MaxCharactersFromEntities = 30;  

try  
{  
    XmlReader reader = XmlReader.Create(new StringReader(markup), settings);  
    while (reader.Read()) { }  
}  
catch (XmlException ex)  
{  
    Console.WriteLine(ex.Message);  
}  

Esse exemplo gera a saída a seguir:

There is an error in XML document (MaxCharactersFromEntities, ).  

Comentários

Um valor zero (0) não significa limites para o número de caracteres resultantes da expansão de entidades. Um valor não zero especifica o número máximo de caracteres que podem resultar da expansão de entidades.

Se o leitor tentar ler um documento que contenha entidades de modo que o tamanho expandido exceda essa propriedade, um XmlException será gerado.

Essa propriedade permite atenuar ataques de negação de serviço em que o invasor envia documentos XML que tentam exceder os limites de memória por meio da expansão de entidades. Limitando os caracteres resultantes de entidades expandidas, você pode detectar o ataque e se recuperar de forma confiável.

Aplica-se a