CA3077: API 디자인, XML 문서 및 XML 텍스트 판독기의 안전하지 않은 처리
속성 | 값 |
---|---|
규칙 ID | CA3077 |
제목 | API 디자인, XML 문서 및 XML 텍스트 판독기의 처리가 안전하지 않습니다. |
범주 | 보안 |
수정 사항이 주요 변경인지 여부 | 주요 변경 아님 |
.NET 9에서 기본적으로 사용 | 아니요 |
원인
XMLDocument 및 XMLTextReader에서 파생된 API를 디자인할 경우 DtdProcessing에 주의해야 합니다. 외부 엔터티 소스를 참조하거나 확인할 때 안전하지 않은 DTDProcessing 인스턴스를 사용하거나 XML에서 안전하지 않은 값을 설정하면 정보가 공개될 수 있습니다.
규칙 설명
DTD(문서 종류 정의) 는 XML 파서가 W3C(World Wide Web Consortium) XML(Extensible Markup Language) 1.0에 정의된 대로 문서의 유효성을 확인할 수 있는 두 가지 방법 중 하나입니다. 이 규칙은 신뢰할 수 없는 데이터가 허용되는 속성 및 인스턴스를 찾아 DoS(서비스 거부) 공격을 야기할 수 있는 잠재적인 Information Disclosure 위협을 개발자에게 경고합니다. 다음 경우에 이 규칙이 트리거됩니다.
XmlDocument 또는 XmlTextReader 클래스는 DTD 처리를 위해 기본 확인자 값을 사용합니다.
XmlDocument 또는 XmlTextReader 파생 클래스에 대해 정의된 생성자가 없거나 XmlResolver에 대해 보안 값이 사용되지 않습니다.
위반 문제를 해결하는 방법
모든 XmlTextReader 예외를 catch하고 적절히 처리하여 경로 정보가 공개되지 않도록 합니다.
XmlResolver 대신 XmlSecureResolver를 사용하여 XmlTextReader에서 액세스할 수 있는 리소스를 제한할 수 있습니다.
경고를 표시하지 않는 경우
입력 출처를 신뢰할 수 있는지 확신할 수 없으면 이 경고의 규칙이 표시되지 않도록 설정하지 않도록 합니다.
경고 표시 안 함
단일 위반만 표시하지 않으려면 원본 파일에 전처리기 지시문을 추가하여 규칙을 사용하지 않도록 설정한 후 다시 사용하도록 설정합니다.
#pragma warning disable CA3077
// The code that's violating the rule is on this line.
#pragma warning restore CA3077
파일, 폴더 또는 프로젝트에 대한 규칙을 사용하지 않도록 설정하려면 구성 파일에서 심각도를 none
으로 설정합니다.
[*.{cs,vb}]
dotnet_diagnostic.CA3077.severity = none
자세한 내용은 방법: 코드 분석 경고 표시 안 함을 참조하세요.
의사 코드 예제
위반
using System;
using System.Xml;
namespace TestNamespace
{
class TestClass : XmlDocument
{
public TestClass () {} // warn
}
class TestClass2 : XmlTextReader
{
public TestClass2() // warn
{
}
}
}
해결 방법
using System;
using System.Xml;
namespace TestNamespace
{
class TestClass : XmlDocument
{
public TestClass ()
{
XmlResolver = null;
}
}
class TestClass2 : XmlTextReader
{
public TestClass2()
{
XmlResolver = null;
}
}
}
.NET