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:
 property long MaxCharactersFromEntities { long get(); void set(long value); };
public long MaxCharactersFromEntities { get; set; }
member this.MaxCharactersFromEntities : int64 with get, set
Public Property MaxCharactersFromEntities As Long

Valor da propriedade

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);
}
Dim markup As String = _
    "<!DOCTYPE Root [" + Environment.NewLine + _
    "  <!ENTITY anEntity ""Expands to more than 30 characters"">" + Environment.NewLine + _
    "  <!ELEMENT Root (#PCDATA)>" + Environment.NewLine + _
    "]>" + Environment.NewLine + _
    "<Root>Content &anEntity;</Root>"

Dim settings As XmlReaderSettings = New XmlReaderSettings()
settings.DtdProcessing = DtdProcessing.Parse;
settings.ValidationType = ValidationType.DTD
settings.MaxCharactersFromEntities = 30

Try
    Dim reader As XmlReader = XmlReader.Create(New StringReader(markup), settings)
    While (reader.Read())
    End While
Catch ex As XmlException
    Console.WriteLine(ex.Message)
End Try

Este exemplo produz a seguinte saída:

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

Comentários

Um valor zero (0) significa que não há limites no número de caracteres resultantes da expansão de entidades. Um valor diferente de 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 reduzir os 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