Share via


CA5372: XPathDocument에 XmlReader 사용

속성
규칙 ID CA5372
타이틀 XPathDocument에 XmlReader를 사용하세요.
범주 보안
수정 사항이 주요 변경인지 여부 주요 변경 아님
.NET 8에서 기본적으로 사용 아니요

원인

XmlReader 개체 없이 인스턴스화된 XPathDocument 클래스를 사용하면 서비스 거부, 정보 공개, 서버 쪽 요청 위치 공격을 초래할 수 있습니다. 이러한 공격은 신뢰할 수 없는 DTD 및 XML 스키마 처리에서 사용되어 XML 폭탄 및 악의적인 외부 엔터티를 XML에 포함할 수 있도록 합니다. XmlReader만 사용하여 DTD를 사용하지 않도록 설정할 수 있습니다. .NET Framework 버전 4.0부터 XmlReader로 인라인 XML 스키마 처리에서는 ProhibitDtdProcessInlineSchema 속성을 기본적으로 false로 설정했습니다. Stream, TextReader, XmlSerializationReader 같은 다른 옵션에서는 DTD 처리를 사용하지 않도록 설정할 수 없습니다.

규칙 설명

신뢰할 수 없는 데이터의 XML을 처리하면 위험한 외부 참조가 로드될 수 있으며 XmlReader를 안전한 확인자와 함께 사용하거나 DTD 처리를 사용하지 않도록 설정한 상태로 사용하여 이를 제한할 수 있습니다. 이 규칙은 XPathDocument 클래스를 사용하고 XmlReader를 생성자 매개 변수로 사용하지 않는 코드를 탐지합니다.

위반 문제를 해결하는 방법

XPathDocument(XmlReader, *) 생성자를 사용합니다.

경고를 표시하지 않는 경우

신뢰할 수 있는 출처에서 제공되어 변조할 수 없는 XML 파일을 처리하는 데 XPathDocument 개체가 사용되는 경우 이 경고를 표시하지 않을 수 있습니다.

경고 표시 안 함

단일 위반만 표시하지 않으려면 원본 파일에 전처리기 지시문을 추가하여 규칙을 사용하지 않도록 설정한 후 다시 사용하도록 설정합니다.

#pragma warning disable CA5372
// The code that's violating the rule is on this line.
#pragma warning restore CA5372

파일, 폴더 또는 프로젝트에 대한 규칙을 사용하지 않도록 설정하려면 구성 파일에서 심각도를 none으로 설정합니다.

[*.{cs,vb}]
dotnet_diagnostic.CA5372.severity = none

자세한 내용은 방법: 코드 분석 경고 표시 안 함을 참조하세요.

의사 코드 예제

위반

다음 의사 코드 샘플에서는 이 규칙에 의해 탐지되는 패턴을 보여 줍니다. XPathDocument의 첫 번째 매개 변수 형식이 XmlReader가 아닙니다.

using System.IO;
using System.Xml.XPath;
...
var obj = new XPathDocument(stream);

해결 방법

using System.Xml;
using System.Xml.XPath;
...
public void TestMethod(XmlReader reader)
{
var obj = new XPathDocument(reader);
}