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 값은 엔터티 확장으로 인해 발생하는 문자 수에 제한이 없음을 의미합니다. 0이 아닌 값은 엔터티 확장으로 인해 발생할 수 있는 최대 문자 수를 지정합니다.

판독기에서 확장된 크기가 이 속성을 XmlException 초과할 수 있도록 엔터티가 포함된 문서를 읽으려고 하면 throw됩니다.

이 속성을 사용하면 공격자가 확장 엔터티를 통해 메모리 제한을 초과하려는 XML 문서를 제출하는 서비스 거부 공격을 완화할 수 있습니다. 확장된 엔터티에서 발생하는 문자를 제한하여 공격을 감지하고 안정적으로 복구할 수 있습니다.

적용 대상