XmlReaderSettings.MaxCharactersFromEntities Property

Definition

문서에서 엔터티 확장명 후의 최대 허용 문자 수를 나타내는 값을 가져오거나 설정합니다.Gets or sets a value indicating the maximum allowable number of characters in a document that result from expanding entities.

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

Property Value

Int64

확장된 엔터티의 최대 허용 문자 수입니다.The maximum allowable number of characters from expanded entities. 기본값은 0입니다.The default is 0.

Examples

다음 코드는이 속성을 설정 하 고 설정 된 한계 보다 큰 크기로 확장 되는 엔터티가 포함 된 문서를 구문 분석 하려고 시도 합니다.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;  
  
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  

이 예에서 생성되는 출력은 다음과 같습니다.This example produces the following output:

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

Remarks

값 (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이 throw 됩니다.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.

Applies to