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

Int64

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.

Platí pro