>백엔드 개발 >C++ >역직렬화를 특정 유형으로 제한하는 경우에도 Json.Net의 `TypeNameHandling.Auto`를 사용한 자동 JSON 역직렬화가 안전합니까?

역직렬화를 특정 유형으로 제한하는 경우에도 Json.Net의 `TypeNameHandling.Auto`를 사용한 자동 JSON 역직렬화가 안전합니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2025-01-07 14:16:41928검색

Is Automatic JSON Deserialization with Json.Net's `TypeNameHandling.Auto` Secure, Even When Limiting Deserialization to a Specific Type?

Json.Net TypeNameHandling Auto로 인해 외부 JSON이 취약할 수 있나요?

문제:

사용자가 사용자 정의 JSON 개체를 업로드하는 웹 사이트 애플리케이션에서는 다음으로 인해 발생하는 잠재적인 위협을 인식하는 것이 필수적입니다. 자동화된 JSON 유형 역직렬화. 문제는 역직렬화된 유일한 유형이 특정 유형(예: MyObject)이고 MyObject의 멤버 중 System.Object 또는 동적 유형이 없는 경우 자동 유형 역직렬화가 취약성에 취약한지 여부입니다.

답변:

이러한 조건을 준수하면 위험이 크게 줄어들지만 완전한 보호가 보장되지는 않습니다. Json.Net의 TypeNameHandling 설정을 Auto로 설정하면 MyObject에 해당 필드가 없는 경우에도 "$type" 정보를 기반으로 개체를 생성할 수 있습니다.

자세한 설명:

Json.Net을 대상으로 하는 공격은 TypeNameHandling 설정을 악용하여 "공격 가젯"(수신 시스템을 손상시키도록 설계된 개체)을 구성합니다. Json.Net의 보호 메커니즘에는 알 수 없는 속성 무시 및 유형 호환성 확인이 포함됩니다. 그러나 유형이 지정되지 않은 명백한 멤버 없이도 공격 가젯을 구성할 수 있는 시나리오가 있습니다.

  • 유형이 지정되지 않은 컬렉션의 역직렬화(예: ArrayList, List)
  • 반형식 컬렉션(예: CollectionBase)
  • 역직렬화 ISerialized를 구현하는 유형(예: 예외)
  • 멤버 조건부 직렬화를 사용하는 유형의 역직렬화(예: public object tempData; public bool ShouldSerializeTempData() { return false; })
  • 권장사항:

    • 주의 사용: TypeNameHandling은 외부 JSON을 역직렬화할 때 신중하게 사용해야 하며, 사용자 정의 SerializationBinder는 다음에 권장됩니다. 유효성 검사.
    • 데이터 모델 검토: 개체, 동적 또는 공격 가젯과 호환되는 구성원 유형이 없는지 확인하세요.
    • 직렬화 바인더 고려: 역직렬화되는 유형을 엄격하게 제어하려면 사용자 정의 SerializationBinder를 구현하세요.

    In 결론적으로 제공된 조건은 위험을 크게 완화하지만 완전한 보안을 보장하지는 않는다는 점에 유의하는 것이 중요합니다. Json.Net의 TypeNameHandling 자동 설정은 공격 가젯 생성을 잠재적으로 용이하게 할 수 있으므로 사용자 정의 직렬화 바인더와 같은 추가 예방 조치가 필요합니다.

    위 내용은 역직렬화를 특정 유형으로 제한하는 경우에도 Json.Net의 `TypeNameHandling.Auto`를 사용한 자동 JSON 역직렬화가 안전합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

    성명:
    본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.