XmlReaderSettings.MaxCharactersFromEntities Właściwość
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Pobiera lub ustawia wartość wskazującą maksymalną dozwoloną liczbę znaków w dokumencie, który wynika z rozszerzania jednostek.
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
Wartość właściwości
Maksymalna dozwolona liczba znaków z rozwiniętych jednostek. Wartość domyślna to 0.
Przykłady
Poniższy kod ustawia tę właściwość, a następnie próbuje przeanalizować dokument zawierający jednostkę, która rozszerza się na rozmiar większy niż ustawiony limit. W rzeczywistym scenariuszu należy ustawić ten limit na wartość wystarczająco dużą, aby obsłużyć prawidłowe dokumenty, ale wystarczająco mały, aby ograniczyć zagrożenie ze strony złośliwych dokumentów.
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
Ten przykład generuje następujące wyniki:
There is an error in XML document (MaxCharactersFromEntities, ).
Uwagi
Wartość zero (0) oznacza brak limitów liczby znaków, które wynikają z rozszerzania jednostek. Wartość niezerowa określa maksymalną liczbę znaków, które mogą wynikać z rozszerzania jednostek.
Jeśli czytelnik próbuje odczytać dokument zawierający jednostki, takie jak rozszerzony rozmiar przekroczy tę właściwość, XmlException zostanie zgłoszony komunikat.
Ta właściwość umożliwia ograniczenie ataków typu "odmowa usługi", w których osoba atakująca przesyła dokumenty XML, które próbują przekroczyć limity pamięci za pośrednictwem rozszerzających się jednostek. Ograniczając znaki wynikające z rozwiniętych jednostek, można wykrywać atak i niezawodnie odzyskiwać.