설명
신뢰할 수 없는 XML을 스키마 검증 없이 처리하면 애플리케이션이 예상하지 않은 구조나 값을 받아들일 수 있습니다. XmlReaderSettings.ValidationType = ValidationType.None처럼 검증을 명시적으로 비활성화한 설정은 보안 경계에서 사용하지 않는 것이 좋습니다.
잠재적 영향
- 잘못된 XML 데이터가 업무 로직으로 전달되어 권한 우회, 데이터 변조, 예외 기반 서비스 거부로 이어질 수 있습니다.
해결 방법
신뢰할 수 있는 스키마를 등록하고 ValidationType.Schema를 사용합니다. XML 외부 개체가 필요하지 않다면 DtdProcessing.Prohibit와 XmlResolver = null도 함께 설정합니다. 검증은 reader로 문서를 읽는 동안 수행되므로 끝까지 읽고, 검증에 실패한 데이터를 업무 로직에 전달하지 마세요.
예시
변경 전
csharp
var settings = new XmlReaderSettings
{
ValidationType = ValidationType.None
};
using var reader = XmlReader.Create(stream, settings);
변경 후
csharp
var settings = new XmlReaderSettings
{
ValidationType = ValidationType.Schema,
DtdProcessing = DtdProcessing.Prohibit,
XmlResolver = null
};
settings.Schemas.Add("urn:example", "schema.xsd");
using var reader = XmlReader.Create(stream, settings);
설명:
- 변경 전: 스키마 검증 없이 보안에 민감한 XML을 파싱하면 잘못되었거나 예상치 못한 데이터가 애플리케이션 로직에 도달할 수 있습니다.
- 변경 후: 신뢰할 수 없는 XML을 파싱하기 전에 ValidationType.Schema와 신뢰할 수 있는 스키마 집합으로 XmlReaderSettings를 설정하세요.