Compartir a través de


XmlReaderSettings.MaxCharactersFromEntities Propiedad

Definición

Obtiene o establece un valor que indica el número máximo de caracteres permitido en un documento que resulta de expandir las entidades.

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

Valor de propiedad

Int64

El número máximo de caracteres permitido de las entidades expandidas. El valor predeterminado es 0.

Ejemplos

El código siguiente establece esta propiedad e intenta analizar un documento que contiene una entidad que se expande a un tamaño mayor que el límite establecido. En un escenario real, establecería este límite en un valor lo suficientemente grande como para controlar documentos válidos, pero lo suficientemente pequeño como para limitar la amenaza de documentos malintencionados.

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  

Este ejemplo produce el siguiente resultado:

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

Comentarios

Un valor cero (0) significa que no hay límites en el número de caracteres resultantes de la expansión de entidades. Un valor distinto de cero especifica el número máximo de caracteres que pueden dar lugar a entidades de expansión.

Si el lector intenta leer un documento que contiene entidades de forma que el tamaño expandido supere esta propiedad, se producirá una XmlException excepción .

Esta propiedad permite mitigar los ataques de denegación de servicio en los que el atacante envía documentos XML que intentan superar los límites de memoria mediante la expansión de entidades. Al limitar los caracteres resultantes de entidades expandidas, puede detectar el ataque y recuperarse de forma confiable.

Se aplica a