XmlReaderSettings.MaxCharactersFromEntities XmlReaderSettings.MaxCharactersFromEntities XmlReaderSettings.MaxCharactersFromEntities XmlReaderSettings.MaxCharactersFromEntities Property


エンティティの展開時に許容されるドキュメント内の最大文字数を示す値を取得または設定します。Gets or sets a value indicating the maximum allowable number of characters in a document that result from expanding entities.

 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


エンティティの展開時に許容される最大文字数。The maximum allowable number of characters from expanded entities. 既定値は 0 です。The default is 0.

次のコードでは、このプロパティを設定してから、設定された制限を超えるサイズに展開するエンティティを含むドキュメントを解析しようとしています。The following code sets this property, and then attempts to parse a document that contains an entity that expands to a size greater than the set limit. 実際のシナリオでは、有効なドキュメントを処理するのに十分な大きさの値にこの制限を設定しますが、悪意のあるドキュメントから脅威を制限するのは十分ではありません。In a real world scenario, you would set this limit to a value large enough to handle valid documents, yet small enough to limit the threat from malicious documents.

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;  

    XmlReader reader = XmlReader.Create(new StringReader(markup), settings);  
    while (reader.Read()) { }  
catch (XmlException ex)  
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  

    Dim reader As XmlReader = XmlReader.Create(New StringReader(markup), settings)  
    While (reader.Read())  
    End While  
Catch ex As XmlException  
End Try  

この例を実行すると、次の出力が生成されます。This example produces the following output:

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


ゼロ (0) の値は、エンティティを展開したときに発生する文字数に制限がないことを意味します。A zero (0) value means no limits on the number of characters that result from expanding entities. 0以外の値は、エンティティの展開によって生じる可能性のある最大文字数を指定します。A non-zero value specifies the maximum number of characters that can result from expanding entities.

拡張されたサイズがこのプロパティXmlExceptionを超えるようなエンティティを含むドキュメントをリーダーが読み取ろうとすると、がスローされます。If the reader attempts to read a document that contains entities such that the expanded size will exceed this property, an XmlException will be thrown.

このプロパティを使用すると、攻撃者が、エンティティの展開によってメモリの制限を超えようとする XML ドキュメントを送信するサービス拒否攻撃を軽減できます。This property allows you to mitigate denial of service attacks where the attacker submits XML documents that attempt to exceed memory limits via expanding entities. 展開されたエンティティの文字数を制限することで、攻撃を検出し、確実に復旧できます。By limiting the characters that result from expanded entities, you can detect the attack and recover reliably.