XmlReaderSettings.MaxCharactersFromEntities Proprietà
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Ottiene o imposta un valore che indica il numero massimo consentito di caratteri in un documento risultante 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à
Numero massimo consentito di caratteri 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, è necessario impostare questo limite su un valore sufficientemente grande da gestire documenti validi, ma abbastanza piccolo da 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
In questo esempio viene generato l'output seguente:
There is an error in XML document (MaxCharactersFromEntities, ).
Commenti
Un valore zero (0) indica che non sono previsti limiti al numero di caratteri risultanti dall'espansione delle entità. Un valore diverso da zero specifica il numero massimo di caratteri che possono derivare dall'espansione delle entità.
Se il lettore tenta di leggere un documento contenente entità in modo che le dimensioni espanse superino questa proprietà, verrà generata un'eccezione XmlException .
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.