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

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

Int64

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

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