XmlReaderSettings.MaxCharactersFromEntities Propriedade
Definição
Importante
Algumas informações dizem respeito a um produto pré-lançado que pode ser substancialmente modificado antes de ser lançado. A Microsoft não faz garantias, de forma expressa ou implícita, em relação à informação aqui apresentada.
Recebe ou define um valor que indica o número máximo permitido de caracteres num documento resultantes da expansão das 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 de Propriedade
O número máximo permitido de caracteres provenientes de entidades expandidas. A predefinição é 0.
Exemplos
O código seguinte define esta propriedade e depois tenta analisar um documento que contenha uma entidade que se expande para um tamanho superior ao limite definido. Num cenário real, definiria este limite a um valor suficientemente grande para lidar com documentos válidos, mas pequeno o suficiente para limitar a ameaça de documentos maliciosos.
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, ).
Observações
Um valor zero (0) significa que não há limites no número de caracteres resultantes da expansão das entidades. Um valor não nulo especifica o número máximo de caracteres que podem resultar da expansão das entidades.
Se o leitor tentar ler um documento que contenha entidades tais que o tamanho expandido exceda esta propriedade, um XmlException será lançado.
Esta propriedade permite mitigar ataques de negação de serviço em que o atacante submete documentos XML que tentam exceder os limites de memória através de entidades em expansão. Ao limitar os caracteres que resultam das entidades expandidas, pode detetar o ataque e recuperar de forma fiável.