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) 值表示對展開實體所產生的字元數沒有限制。 非零值則表示展開實體可產生的最大字元數。
若讀者嘗試閱讀包含實體且擴充尺寸將超過此性質的文件,則會拋出 a XmlException 。
此特性可防止阻斷服務攻擊,防止攻擊者提交試圖透過擴展實體超過記憶體限制的 XML 文件。 透過限制由擴展實體產生的角色數量,你可以偵測攻擊並穩定地恢復。