다음을 통해 공유


CA5370: 판독기 유효성 검사에 XmlReader 사용

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

원인

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

규칙 설명

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

위반 문제를 해결하는 방법

  • ProhibitDtdProcessInlineSchema 속성이 false로 설정된 XmlValidatingReader(XmlReader)를 사용합니다.
  • .NET Framework 2.0부터 XmlValidatingReader는 사용되지 않습니다. XmlReader.Create로 유효성 검사 판독기를 인스턴스화할 수 있습니다.

경고를 표시하지 않는 경우

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

경고 표시 안 함

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

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

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

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

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

의사 코드 예제

위반

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

using System;
using System.IO;
using System.Xml;
...
public void TestMethod(Stream xmlFragment, XmlNodeType fragType, XmlParserContext context)
{
    var obj = new XmlValidatingReader(xmlFragment, fragType, context);
}

해결 방법

using System;
using System.Xml;
...
public void TestMethod(XmlReader xmlReader)
{
    var obj = new XmlValidatingReader(xmlReader);
}