집 >
백엔드 개발 >
C++ >
Json.Net의 TypeNameHandling을 사용한 JSON 역직렬화는 얼마나 안전합니까?
Json.Net의 TypeNameHandling을 사용한 JSON 역직렬화는 얼마나 안전합니까?
Patricia Arquette
풀어 주다: 2025-01-07 14:23:42
원래의
623명이 탐색했습니다.
외부 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!