CA5371: 스키마 읽기에 XmlReader 사용
속성 | 값 |
---|---|
규칙 ID | CA5371 |
타이틀 | 스키마 읽기에 XmlReader를 사용하세요. |
범주 | 보안 |
수정 사항이 주요 변경인지 여부 | 주요 변경 아님 |
.NET 8에서 기본적으로 사용 | 아니요 |
원인
XmlReader
개체 없이 인스턴스화된 XmlSchema.Read를 사용하여 신뢰할 수 없는 XML 입력을 처리하면 서비스 거부, 정보 공개, 서버 쪽 요청 위조 공격을 초래할 수 있습니다. 이러한 공격은 신뢰할 수 없는 DTD 및 XML 스키마 처리에서 사용되어 XML 폭탄 및 악의적인 외부 엔터티를 XML에 포함할 수 있도록 합니다. XmlReader
만 사용하여 DTD를 사용하지 않도록 설정할 수 있습니다. .NET Framework 버전 4.0부터 XmlReader
로 인라인 XML 스키마 처리에서는 ProhibitDtd
및 ProcessInlineSchema
속성을 기본적으로 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);
}
.NET