XmlReaderSettings.MaxCharactersFromEntities Egenskap

Definition

Hämtar eller anger ett värde som anger det maximala tillåtna antalet tecken i ett dokument som är resultatet av att expandera entiteter.

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

Egenskapsvärde

Det maximala tillåtna antalet tecken från expanderade entiteter. Standardvärdet är 0.

Exempel

Följande kod anger den här egenskapen och försöker sedan parsa ett dokument som innehåller en entitet som expanderar till en storlek som är större än den angivna gränsen. I ett verkligt scenario skulle du ange den här gränsen till ett värde som är tillräckligt stort för att hantera giltiga dokument, men ändå tillräckligt litet för att begränsa hotet från skadliga 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

Det här exemplet genererar följande utdata:

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

Kommentarer

Ett nollvärde (0) innebär inga gränser för antalet tecken som uppstår när entiteterna expanderas. Ett värde som inte är noll anger det maximala antalet tecken som kan uppstå när entiteter expanderas.

Om läsaren försöker läsa ett dokument som innehåller entiteter så att den expanderade storleken överskrider den här egenskapen genereras en XmlException .

Med den här egenskapen kan du minimera överbelastningsattacker där angriparen skickar XML-dokument som försöker överskrida minnesgränserna via expanderande entiteter. Genom att begränsa de tecken som kommer från expanderade entiteter kan du identifiera attacken och återställa på ett tillförlitligt sätt.

Gäller för