XmlReaderSettings.MaxCharactersFromEntities Propriété
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
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é
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.