XmlReaderSettings.MaxCharactersFromEntities プロパティ

定義

エンティティの展開時に許容されるドキュメント内の最大文字数を示す値を取得または設定します。

C#
public long MaxCharactersFromEntities { get; set; }

プロパティ値

Int64

エンティティの展開時に許容される最大文字数。 既定値は 0 です。

次のコードでは、このプロパティを設定し、設定された制限を超えるサイズに拡張するエンティティを含むドキュメントの解析を試みます。 実際のシナリオでは、この制限を有効なドキュメントを処理するのに十分な大きさに設定しますが、悪意のあるドキュメントからの脅威を制限するのに十分な小さい値に設定します。

C#
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);  
}  

この例を実行すると、次の出力が生成されます。

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

注釈

ゼロ (0) の値は、エンティティの展開に起因する文字数に制限がないことを意味します。 0 以外の値は、エンティティの展開に起因する可能性がある最大文字数を指定します。

リーダーが、拡張されたサイズがこのプロパティを超えるエンティティを含むドキュメントを読み取ろうとすると、スロー XmlException されます。

このプロパティを使用すると、拡張エンティティを介してメモリ制限を超えようとする XML ドキュメントを攻撃者が送信するサービス拒否攻撃を軽減できます。 拡張されたエンティティに起因する文字を制限することで、攻撃を検出して確実に回復できます。

適用対象

製品 バージョン
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7
.NET Framework 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.6, 2.0, 2.1
UWP 10.0