CA5370: 판독기 유효성 검사에 XmlReader 사용
속성 | 값 |
---|---|
규칙 ID | CA5370 |
타이틀 | 판독기 유효성 검사에 XmlReader를 사용하세요. |
범주 | 보안 |
수정 사항이 주요 변경인지 여부 | 주요 변경 아님 |
.NET 8에서 기본적으로 사용 | 아니요 |
원인
XmlReader
개체 없이 인스턴스화된 XmlValidatingReader
클래스를 사용하여 신뢰할 수 없는 XML 입력의 유효성을 검사하면 서비스 거부, 정보 공개, 서버 쪽 요청 위조를 초래할 수 있습니다. 이러한 공격은 신뢰할 수 없는 DTD 및 XML 스키마 처리에서 사용되어 XML 폭탄 및 악의적인 외부 엔터티를 XML에 포함할 수 있도록 합니다. XmlReader
만 사용하여 DTD를 사용하지 않도록 설정할 수 있습니다. .NET Framework 버전 4.0부터 XmlReader
로 인라인 XML 스키마 처리에서는 ProhibitDtd
및 ProcessInlineSchema
속성을 기본적으로 false
로 설정했습니다.
규칙 설명
신뢰할 수 없는 DTD 및 XML 스키마를 처리하면 위험한 외부 참조가 로드될 수 있습니다. 이 위험한 로드는 XmlReader
를 안전한 확인자와 함께 사용하거나 DTD 및 XML 인라인 스키마 처리를 사용하지 않도록 설정한 상태로 사용하여 제한할 수 있습니다. 이 규칙은 XmlReader
를 생성자 매개 변수로 사용하지 않고 XmlValidatingReader
클래스를 사용하는 코드를 탐지합니다.
위반 문제를 해결하는 방법
ProhibitDtd
및ProcessInlineSchema
속성이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);
}
.NET