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-документы, которые пытаются превысить ограничения памяти с помощью расширяющихся сущностей. Ограничивая символы, которые приводят к расширенным сущностям, можно обнаруживать атаку и надежно восстанавливаться.