다음을 통해 공유


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

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

원인

System.Web.Services.WebMethodAttribute 또는 System.ServiceModel.OperationContractAttribute를 사용하는 메서드에 DataSet 또는 DataTable을 참조할 수 있는 매개 변수가 있습니다.

이 규칙은 비슷한 규칙인 CA2355: 역직렬화된 개체 그래프의 안전하지 않은 DataSet 또는 DataTable과 다른 접근 방식을 사용하며 다른 경고를 찾습니다.

규칙 설명

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

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

위반 문제를 해결하는 방법

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

경고를 표시하지 않는 경우

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

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

경고 표시 안 함

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

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

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

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

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

의사 코드 예제

위반

using System;
using System.Data;
using System.Web.Services;

[WebService(Namespace = "http://contoso.example.com/")]
public class MyService : WebService
{
    [WebMethod]
    public string MyWebMethod(DataTable dataTable)
    {
        return null;
    }
}

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

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

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

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

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

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

CA2351: DataSet.ReadXml()의 입력을 신뢰할 수 있는지 확인하세요

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