>백엔드 개발 >C++ >Json.Net의 TypeNameHandling을 사용한 JSON 역직렬화는 얼마나 안전합니까?

Json.Net의 TypeNameHandling을 사용한 JSON 역직렬화는 얼마나 안전합니까?

Patricia Arquette
Patricia Arquette원래의
2025-01-07 14:23:42679검색

How Secure is Your JSON Deserialization with Json.Net's TypeNameHandling?

외부 JSON 노출: Json.Net을 사용한 TypeNameHandling의 위험 이해

자동 유형 처리를 사용한 JSON 역직렬화는 보안 위협을 초래할 수 있습니다. 이 문서의 목적은 Json.Net에서 자동으로 설정된 설정으로 TypeNameHandling을 사용할 때 발생할 수 있는 취약점을 명확히 하는 것입니다.

Json.Net의 TypeNameHandling 이해

TypeNameHandling이 JSON을 제어하는 ​​방식. Net은 인스턴스화할 형식의 정규화된 이름을 지정하는 "$type" 속성을 사용하여 형식을 역직렬화합니다. Auto로 설정하면 Json.Net은 지정된 유형을 확인하고 인스턴스 생성을 시도합니다.

잠재적 위험

데이터 모델에 직접 개체 또는 동적 멤버가 없으면 역직렬화 공격으로부터 보호받을 수 있다고 가정할 수 있습니다. 그러나 특정 시나리오에서는 여전히 위험이 발생할 수 있습니다.

  • 형식화되지 않은 컬렉션: ArrayList 또는 List와 같은 형식화되지 않은 컬렉션을 역직렬화합니다. 해당 항목 내의 가젯 공격에 취약합니다.
  • CollectionBase: CollectionBase에서 상속된 유형은 런타임 항목 유효성 검사를 허용하여 공격 가젯 구성에 잠재적인 허점을 만듭니다.
  • 공유 기본 유형: 공격 가젯이 공유하는 기본 유형 또는 인터페이스가 있는 다형성 값은 역직렬화에 취약합니다. 공격.
  • ISerialized 유형: ISerialized를 구현하는 유형은 Exception.Data 사전을 포함하여 유형이 지정되지 않은 멤버를 역직렬화할 수 있습니다.
  • 조건부 직렬화: 다음으로 표시된 멤버 ShouldSerialize 메서드를 통해 직렬화되지 않은 메서드가 JSON에 있는 경우 여전히 역직렬화할 수 있습니다. 입력.
  • 완화 조치

    보안을 강화하려면 다음을 고려하십시오.

    • Custom SerializationBinder: 예상 유형을 검증하고 예상치 못한 유형의 역직렬화를 방지하기 위해 사용자 정의 SerializationBinder를 구현합니다. 유형.
    • TypeNameHandling.None: 역직렬화 중에 유형 확인을 효과적으로 비활성화하는 TypeNameHandling을 None으로 설정하는 것이 좋습니다.
    • 예기치 않은/숨겨진 입력에 대한 경고: 데이터에 유형이 지정되지 않은 멤버나 숨겨진 직렬화 동작이 있는지 경계하세요. model.
    • 기본 직렬화 계약 비활성화: DefaultContractResolver.IgnoreSerializedInterface 또는 DefaultContractResolver.IgnoreSerializedAttribute를 false로 설정하지 마십시오.

    결론

    Json.Net의 특정 메커니즘은 취약점을 완화하는 데 도움이 되지만 외부 JSON 역직렬화에서 TypeNameHandling으로 인해 발생하는 잠재적인 위험을 신중하게 고려하는 것이 중요합니다. 사용자 정의 SerializationBinder 구현 및 데이터 모델 입력 확인과 같은 권장 예방 조치를 따르면 Json.Net의 기능을 활용하면서 애플리케이션의 보안을 강화할 수 있습니다.

    위 내용은 Json.Net의 TypeNameHandling을 사용한 JSON 역직렬화는 얼마나 안전합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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