>백엔드 개발 >C++ >Json.Net의 TypeNameHandling을 사용하여 외부 소스에서 JSON 역직렬화를 보호하려면 어떻게 해야 합니까?

Json.Net의 TypeNameHandling을 사용하여 외부 소스에서 JSON 역직렬화를 보호하려면 어떻게 해야 합니까?

Linda Hamilton
Linda Hamilton원래의
2025-01-07 14:12:40164검색

How Can I Secure My JSON Deserialization from External Sources Using Json.Net's TypeNameHandling?

Json.Net TypeNameHandling 자동으로 인한 외부 JSON 취약성

Json.Net의 TypeNameHandling 자동 설정은 신뢰할 수 없는 JSON을 역직렬화할 때 잠재적으로 보안 위험을 초래할 수 있습니다. 소스. 그러나 특정 지침을 준수하면 이러한 위험을 완화할 수 있습니다.

유형 안전 및 공격 가젯

TypeNameHandling을 악용하는 공격은 악의적인 작업을 실행하는 "공격 가젯" 구축에 의존합니다. 인스턴스화 또는 초기화 시. Json.Net은 역직렬화된 유형과 예상 유형의 호환성을 검증하여 이러한 공격으로부터 보호합니다.

취약성 조건

대상에 명시적인 개체나 동적 멤버가 없는 경우 등급이 위험을 줄여준다고 해서 안전성이 완전히 보장되는 것은 아닙니다. 다음 시나리오에서 잠재적인 취약점이 발생할 수 있습니다.

  • 유형이 지정되지 않은 컬렉션: 유형이 지정되지 않은 컬렉션(예: List)을 역직렬화하면 컬렉션 항목 내에 공격 가젯을 위한 공간이 남습니다.
  • CollectionBase 구현: CollectionBase 유형은 런타임에만 항목 유형을 검증할 수 있어 잠재적인 취약성 창을 생성합니다.
  • 공유 기본 유형/인터페이스: 공격 가젯과 기본 유형 또는 인터페이스를 공유하는 유형은 취약성을 상속할 수 있습니다.
  • ISerialized 인터페이스: ISerialize를 구현하는 유형의 역직렬화를 통해 유형이 지정되지 않은 멤버를 허용할 수 있음 deserialization.
  • 조건부 직렬화: ShouldSerializeAttribute 메서드로 표시된 멤버는 명시적으로 직렬화되지 않은 경우에도 역직렬화될 수 있습니다.
  • 위험 완화

    위험을 최소화하려면 다음 사항을 반드시 준수해야 합니다. 권장 사항:

    • 가능한 경우 TypeNameHandling.None을 사용하세요.
    • 사용자 지정 SerializationBinder를 구현하여 수신 유형을 확인하고 예상치 못한 유형의 역직렬화를 방지하세요.
    • [Serialized ] 속성을 DefaultContractResolver.IgnoreSerializedAttribute로 설정하여 true.
    • 역직렬화해서는 안 되는 모든 객체 멤버가 false를 반환하는 ShouldSerializeAttribute 메서드로 표시되어 있는지 확인하세요.

    이러한 지침을 준수하면 JSON을 안전하게 역직렬화할 수 있습니다. TypeNameHandling auto가 있으면 공격 위험이 크게 줄어듭니다.

    위 내용은 Json.Net의 TypeNameHandling을 사용하여 외부 소스에서 JSON 역직렬화를 보호하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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