Share via


CA3061: URL로 스키마를 추가하지 마세요.

속성
규칙 ID CA3061
타이틀 URL로 스키마를 추가하지 마세요.
범주 보안
수정 사항이 주요 변경인지 여부 주요 변경 아님
.NET 8에서 기본적으로 사용 아니요

원인

XmlSchemaCollection.Add(String, String)의 오버로드는 XmlUrlResolver를 사용하여 URI 양식으로 외부 XML 스키마를 지정합니다. URI 문자열이 오염된 경우 XML 폭탄과 악성 외부 엔터티를 포함할 수 있는 악의적인 XML 스키마를 구문 분석할 수 있습니다. 이렇게 하면 악의적인 공격자가 서비스 거부, 정보 공개 또는 서버 쪽 요청 위조 공격을 할 수 있습니다.

규칙 설명

위험한 외부 참조를 유발할 수 있으므로 Add 메서드의 안전하지 않은 오버로드를 사용하지 마세요.

위반 문제를 해결하는 방법

  • XmlSchemaCollection.Add(String, String)는 사용하지 마세요.

경고를 표시하지 않는 경우

XML이 위험한 외부 참조를 확인하지 않는 경우 이 규칙을 표시하지 않습니다.

경고 표시 안 함

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

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

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

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

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

의사 코드 예제

위반

다음 의사 코드 샘플에서는 이 규칙에 의해 탐지되는 패턴을 보여 줍니다. 두 번째 매개 변수의 형식은 string입니다.

using System;
using System.Xml.Schema;
...
XmlSchemaCollection xsc = new XmlSchemaCollection();
xsc.Add("urn: bookstore - schema", "books.xsd");

해결 방법

using System;
using System.IO;
using System.Xml;
using System.Xml.Schema;
...
XmlSchemaCollection xsc = new XmlSchemaCollection();
xsc.Add("urn: bookstore - schema", new XmlTextReader(new FileStream(""xmlFilename"", FileMode.Open)));