XmlReaderSettings.MaxCharactersFromEntities プロパティ
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
エンティティの展開時に許容されるドキュメント内の最大文字数を示す値を取得または設定します。
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
プロパティ値
エンティティの展開時に許容される最大文字数。 既定値は 0 です。
例
次のコードでは、このプロパティを設定し、設定された制限を超えるサイズに拡張するエンティティを含むドキュメントの解析を試みます。 実際のシナリオでは、この制限を有効なドキュメントを処理するのに十分な大きさに設定しますが、悪意のあるドキュメントからの脅威を制限するのに十分な小さい値に設定します。
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
この例を実行すると、次の出力が生成されます。
There is an error in XML document (MaxCharactersFromEntities, ).
注釈
ゼロ (0) の値は、エンティティの展開に起因する文字数に制限がないことを意味します。 0 以外の値は、エンティティの展開に起因する可能性がある最大文字数を指定します。
リーダーが、拡張されたサイズがこのプロパティを超えるエンティティを含むドキュメントを読み取ろうとすると、スロー XmlException されます。
このプロパティを使用すると、拡張エンティティを介してメモリ制限を超えようとする XML ドキュメントを攻撃者が送信するサービス拒否攻撃を軽減できます。 拡張されたエンティティに起因する文字を制限することで、攻撃を検出して確実に回復できます。