XmlReaderSettings.MaxCharactersFromEntities XmlReaderSettings.MaxCharactersFromEntities XmlReaderSettings.MaxCharactersFromEntities XmlReaderSettings.MaxCharactersFromEntities Property

정의

문서에서 엔터티 확장명 후의 최대 허용 문자 수를 나타내는 값을 가져오거나 설정합니다.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

속성 값

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

예제

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

설명

값 (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.

적용 대상