XmlReaderSettings.MaxCharactersFromEntities Propriété

Définition

Obtient ou définit une valeur correspondant au nombre maximal autorisé de caractères dans un document, qui résultent du développement des entités.

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

Valeur de propriété

Int64

Nombre maximal autorisé de caractères résultant du développement des entités. La valeur par défaut est 0.

Exemples

Le code suivant définit cette propriété, puis tente d’analyser un document qui contient une entité qui s’étend à une taille supérieure à la limite définie. Dans un scénario réel, vous devez définir cette limite sur une valeur suffisamment grande pour gérer les documents valides, mais suffisamment petite pour limiter la menace des documents malveillants.

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  

Cet exemple produit la sortie suivante :

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

Remarques

Une valeur zéro (0) ne signifie aucune limite quant au nombre de caractères résultant du développement d’entités. Une valeur différente de zéro spécifie le nombre maximal de caractères pouvant provenir d’entités en expansion.

Si le lecteur tente de lire un document qui contient des entités de telle sorte que la taille développée dépasse cette propriété, une XmlException exception est levée.

Cette propriété vous permet d’atténuer les attaques par déni de service lorsque l’attaquant envoie des documents XML qui tentent de dépasser les limites de mémoire via des entités en expansion. En limitant les caractères résultant d’entités développées, vous pouvez détecter l’attaque et récupérer de manière fiable.

S’applique à