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 pak se pokusí 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á, že počet znaků, které mají za následek rozbalení entit, nejsou nijak omezeny. Nenulová hodnota určuje maximální počet znaků, které mohou 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 vyvolá se vyvolá.
Tato vlastnost umožňuje zmírnit útoky na odepření služeb, 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 entit. Když omezíte znaky, které jsou výsledkem rozbalených entit, můžete útok rozpoznat a spolehlivě obnovit.