XmlReaderSettings.MaxCharactersFromEntities Vlastnost

Definice

Získá nebo nastaví hodnotu označující maximální povolený počet znaků v dokumentu, který je výsledkem rozbalení entit.

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

Hodnota vlastnosti

Maximální povolený počet znaků z rozbalených entit. Výchozí hodnota je 0.

Příklady

Následující kód nastaví tuto vlastnost a pokusí se analyzovat dokument obsahující entitu, která se rozšíří na velikost větší než nastavený limit. Ve skutečném scénáři byste tento limit nastavili na hodnotu dostatečně velkou pro zpracování platných dokumentů, ale dostatečně malé, abyste omezili hrozbu ze škodlivých dokumentů.

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

Tento příklad vytvoří následující výstup:

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

Poznámky

Nulová hodnota (0) znamená žádné limity počtu znaků, které jsou výsledkem rozbalení entit. Nenulová hodnota určuje maximální počet znaků, které můžou mít za následek rozbalení entit.

Pokud se čtenář pokusí přečíst dokument, který obsahuje entity tak, aby rozšířená velikost překročila tuto vlastnost, XmlException bude vyvolána.

Tato vlastnost umožňuje zmírnit útoky na dostupnost služby, kdy útočník odesílá dokumenty XML, které se pokoušejí překročit limity paměti prostřednictvím rozšiřujících se entit. Omezením znaků, které jsou výsledkem rozbalených entit, můžete útok rozpoznat a spolehlivě obnovit.

Platí pro