XmlReaderSettings.MaxCharactersFromEntities Propriedade
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
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
O número máximo permitido de caracteres de entidades expandidas. O padrão é 0.
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
Esse exemplo gera a saída a seguir:
There is an error in XML document (MaxCharactersFromEntities, ).
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.