CA5369: 역직렬화에 XmlReader 사용

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

원인

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

규칙 설명

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

위반 문제를 해결하는 방법

Deserialize(XmlReader), Deserialize(XmlReader, String), Deserialize(XmlReader, XmlDeserializationEvents) 또는 Deserialize(XmlReader, String, XmlDeserializationEvents) 이외의 XmlSerializer.Deserialize 오버로드를 사용하지 마세요.

경고를 표시하지 않는 경우

구문 분석된 XML이 신뢰할 수 있는 출처에서 제공되어 변조할 수 없는 경우 이 경고를 표시하지 않을 수 있습니다.

경고 표시 안 함

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

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

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

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

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

의사 코드 예제

위반

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

using System.IO;
using System.Xml.Serialization;
...
new XmlSerializer(typeof(TestClass).Deserialize(new FileStream("filename", FileMode.Open));

해결 방법

using System.IO;
using System.Xml;
using System.Xml.Serialization;
...
new XmlSerializer(typeof(TestClass)).Deserialize(XmlReader.Create (new FileStream("filename", FileMode.Open)));