XmlReaderSettings.MaxCharactersFromEntities Свойство

Определение

Возвращает или задает значение, указывающее максимально допустимое количество символов в документе, которое приводит к расширению сущностей.

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

Значение свойства

Максимально допустимое количество символов из развернутых сущностей. Значение по умолчанию — 0.

Примеры

Следующий код задает это свойство, а затем пытается проанализировать документ, содержащий сущность, которая расширяется до размера, превышающего заданное ограничение. В реальном мире этот предел будет иметь достаточно большое значение для обработки допустимых документов, но достаточно мало, чтобы ограничить угрозу от вредоносных документов.

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

В примере получается следующий вывод.

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

Комментарии

Нулевое значение (0) означает отсутствие ограничений на количество символов, которые приводят к расширению сущностей. Значение, отличное от нуля, указывает максимальное количество символов, которое может привести к расширению сущностей.

Если читатель пытается прочитать документ, содержащий сущности, такие, что развернутый размер превысит это свойство, XmlException создается исключение.

Это свойство позволяет устранять атаки типа "отказ в обслуживании", когда злоумышленник отправляет XML-документы, которые пытаются превысить ограничения памяти с помощью расширяющихся сущностей. Ограничивающий символы, полученные из развернутых сущностей, можно обнаружить атаку и надежно восстановить.

Применяется к