XmlReaderSettings.MaxCharactersFromEntities 屬性

定義

取得或設定值,指出文件中產生自展開實體的最大可允許字元數。

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

屬性值

Int64

來自展開實體的最大可允許字元數。 預設值是 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) 值表示展開實體所產生的字元數目沒有限制。 非零值會指定擴充實體所產生的字元數上限。

如果讀取器嘗試讀取包含實體的檔,使展開的大小超過此屬性, XmlException 將會擲回 。

此屬性可讓您減輕阻斷服務攻擊,而攻擊者會透過擴充實體提交嘗試超過記憶體限制的 XML 檔。 藉由限制擴充實體所產生的字元,您可以偵測攻擊並可靠地復原。

適用於