다음을 통해 공유


CA5371: 스키마 읽기에 XmlReader 사용

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

원인

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

규칙 설명

신뢰할 수 없는 DTD 및 XML 스키마를 처리하면 위험한 외부 참조가 로드될 수 있습니다. XmlReader를 안전한 확인자와 함께 사용하거나 DTD 및 XML 인라인 스키마 처리를 사용하지 않도록 설정한 상태로 사용하여 이를 제한해야 합니다. 이 규칙은 XmlReader를 매개 변수로 사용하지 않고 XmlSchema.Read 메서드를 사용하는 코드를 탐지합니다.

위반 문제를 해결하는 방법

XmlSchema.Read(XmlReader, *) 오버로드를 사용합니다.

경고를 표시하지 않는 경우

신뢰할 수 있는 출처에서 제공되어 변조할 수 없는 XML을 처리하는 데 XmlSchema.Read 메서드가 항상 사용되는 경우 이 경고를 표시하지 않을 수 있습니다.

경고 표시 안 함

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

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

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

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

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

의사 코드 예제

위반

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

using System.IO;
using System.Xml.Schema;
...
public void TestMethod(Stream stream, ValidationEventHandler validationEventHandler)
{
    XmlSchema.Read(stream, validationEventHandler);
}

해결 방법

using System.IO;
using System.Xml.Schema;
...
public void TestMethod(XmlReader reader, ValidationEventHandler validationEventHandler)
{
    XmlSchema.Read(reader, validationEventHandler);
}