XmlReaderSettings.MaxCharactersFromEntities Właściwość

Definicja

Pobiera lub ustawia wartość wskazującą maksymalną dozwoloną liczbę znaków w dokumencie, która powoduje powiększanie jednostek.Gets or sets a value indicating the maximum allowable number of characters in a document that result from expanding entities.

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.The maximum allowable number of characters from expanded entities. Wartość domyślna to 0.The default is 0.

Przykłady

Poniższy kod ustawia tę właściwość, a następnie próbuje przeanalizować dokument zawierający jednostkę, która rozwija się o rozmiar większy niż określony limit.The following code sets this property, and then attempts to parse a document that contains an entity that expands to a size greater than the set limit. W świecie rzeczywistym można ustawić ten limit na wartość wystarczającą do obsługi prawidłowych dokumentów, ale jest ona wystarczająco mała, aby ograniczyć zagrożenie ze strony złośliwych dokumentów.In a real world scenario, you would set this limit to a value large enough to handle valid documents, yet small enough to limit the threat from malicious documents.

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:This example produces the following output:

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

Uwagi

Wartość zerowa (0) oznacza brak limitów liczby znaków będących wynikiem rozwinięcia jednostek.A zero (0) value means no limits on the number of characters that result from expanding entities. Wartość różna od zera określa maksymalną liczbę znaków, które mogą wynikać z rozwijających się jednostek.A non-zero value specifies the maximum number of characters that can result from expanding entities.

Jeśli czytelnik podejmie próbę odczytania dokumentu zawierającego jednostki, takie jak rozmiar rozwiniętej wartości spowoduje przekroczenie tej XmlException właściwości, zostanie zgłoszony.If the reader attempts to read a document that contains entities such that the expanded size will exceed this property, an XmlException will be thrown.

Ta właściwość pozwala wyeliminować ataki typu "odmowa usługi", gdy osoba atakująca przesyła dokumenty XML próbujące przekroczyć limity pamięci za pomocą rozszerzających się jednostek.This property allows you to mitigate denial of service attacks where the attacker submits XML documents that attempt to exceed memory limits via expanding entities. Ograniczając znaki, które wynikają z rozwiniętych jednostek, można wykryć atak i przeprowadzić niezawodne odzyskiwanie.By limiting the characters that result from expanded entities, you can detect the attack and recover reliably.

Dotyczy