XmlReaderSettings.MaxCharactersFromEntities Vlastnost
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
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.