다음을 통해 공유


CA2355: 역직렬화된 개체 그래프의 안전하지 않은 DataSet 또는 DataTable

속성
규칙 ID CA2355
타이틀 역직렬화된 개체 그래프의 안전하지 않은 데이터 세트 또는 DataTable
범주 보안
수정 사항이 주요 변경인지 여부 주요 변경 아님
.NET 8에서 기본적으로 사용 아니요

원인

캐스팅되거나 지정된 형식의 개체 그래프에 DataSet 또는 DataTable이 포함될 수 있는 경우 역직렬화합니다.

이 규칙은 유사한 규칙인 CA2353: 직렬화 가능 형식의 안전하지 않은 DataSet 또는 DataTable입니다에 대해 다른 방법을 사용합니다.

다음 경우에 캐스팅된 형식 또는 지정된 형식이 평가됩니다.

규칙 설명

BinaryFormatter를 사용하여 신뢰할 수 없는 입력을 역직렬화할 때 역직렬화된 개체 그래프에 DataSet 또는 DataTable이 포함되어 있으면 공격자가 악의적인 페이로드를 만들어 서비스 거부 공격을 수행할 수 있습니다. 알 수 없는 원격 코드 실행 취약성이 있을 수 있습니다.

자세한 내용은 DataSet 및 DataTable 보안 지침을 참조하세요.

위반 문제를 해결하는 방법

  • 가능하면 DataSetDataTable 대신 Entity Framework를 사용합니다.
  • 직렬화된 데이터를 변조 방지로 설정합니다. serialization 후에 직렬화된 데이터에 암호화된 방식으로 서명합니다. deserialization 전에 암호화 시그니처의 유효성을 검사합니다. 암호화 키가 공개되지 않도록 보호하고 키 순환을 설계합니다.

경고를 표시하지 않는 경우

다음 경우에는 이 규칙의 경고를 표시하지 않아도 됩니다.

  • 입력을 신뢰할 수 있습니다. 애플리케이션의 트러스트 경계 및 데이터 흐름이 시간이 지남에 따라 달라질 수 있다는 점을 고려합니다.
  • 위반 문제를 해결하는 방법의 예방 조치 중 하나를 수행했습니다.

경고 표시 안 함

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

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

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

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

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

의사 코드 예제

위반

using System.Data;
using System.IO;
using System.Runtime.Serialization;

[Serializable]
public class MyClass
{
    public MyOtherClass OtherClass { get; set; }
}

[Serializable]
public class MyOtherClass
{
    private DataSet myDataSet;
}

public class ExampleClass
{
    public MyClass Deserialize(Stream stream)
    {
        BinaryFormatter bf = new BinaryFormatter();
        return (MyClass) bf.Deserialize(stream);
    }
}

CA2350: DataTable.ReadXml()의 입력을 신뢰할 수 있는지 확인합니다.

CA2351: DataSet.ReadXml()의 입력을 신뢰할 수 있는지 확인합니다.

CA2352: 직렬화 가능 형식의 안전하지 않은 DataSet 또는 DataTable은 원격 코드 실행 공격에 취약할 수 있음

CA2353: 직렬화 가능 형식의 안전하지 않은 DataSet 또는 DataTable

CA2354: 역직렬화된 개체 그래프의 안전하지 않은 DataSet 또는 DataTable은 원격 코드 실행 공격에 취약할 수 있습니다.

CA2356: 웹 역직렬화된 개체 그래프의 안전하지 않은 DataSet 또는 DataTable

CA2361: DataSet.ReadXml()을 포함하는 자동 생성된 클래스가 신뢰할 수 없는 데이터와 함께 사용되지 않도록 하기

CA2362: 자동 생성된 직렬화 가능 형식의 안전하지 않은 DataSet 또는 DataTable은 원격 코드 실행 공격에 취약할 수 있음