Condividi tramite


XmlReaderSettings.MaxCharactersFromEntities Proprietà

Definizione

Ottiene o imposta un valore che indica il numero massimo di caratteri consentito in un documento generato dall'espansione delle 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

Valore della proprietà

Int64

Numero massimo consentito per i caratteri generati dalle entità espanse. Il valore predefinito è 0.

Esempio

Il codice seguente imposta questa proprietà e quindi tenta di analizzare un documento contenente un'entità che si espande a una dimensione maggiore del limite impostato. In uno scenario reale, si imposta questo limite su un valore sufficiente per gestire documenti validi, ma abbastanza piccolo per limitare la minaccia da documenti dannosi.

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  

Nell'esempio viene prodotto l'output seguente:

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

Commenti

Un valore zero (0) indica che non è possibile limitare il numero di caratteri risultanti dall'espansione delle entità. Un valore diverso da zero specifica il numero massimo di caratteri che possono risultare da entità di espansione.

Se il lettore tenta di leggere un documento contenente entità in modo che le dimensioni espanse superino questa proprietà, verrà generata una XmlException proprietà.

Questa proprietà consente di attenuare gli attacchi denial of service in cui l'utente malintenzionato invia documenti XML che tentano di superare i limiti di memoria tramite entità di espansione. Limitando i caratteri risultanti da entità espanse, è possibile rilevare l'attacco e recuperare in modo affidabile.

Si applica a