Effective Java 12장. 직렬화 [ 아이템 85. 자바 직렬화의 대안을 찾으라 ]

Yunny.Log ·2022년 9월 17일
0
post-thumbnail

자바 직렬화의 대안을 찾으라

직렬화란?

  • 자바가 객체를 바이트 스트림 으로 인코딩하고(직렬화) 그 바이트 스트림으로부터 다시 객체를 재구성하는 (역직렬화) 메커니즘

왜 직렬화를 사용?

  • 목적지에서 객체를 알 수 있는 방법이 없습니다. 그래서 모두 다 알 수 있는 것으로 변환 필요
  • 변환을 도와주는 방법이 직렬화이며 직렬화를 통해서 바이트 스트림으로 변환 가능

직렬화의 단점

직렬화를 하고 나서 역직렬화를 할 때 문제

  • 공격 범위가 너무 넓고 지속적으로 더 넓어져 방어하기 어렵다는 점
  • 바이트 스트림을 역직렬화하는 과정에서 readObject 메서드는 그 타입들 안의 모든 코드를 수행
  • 신뢰할 수 없는 스트림을 역직렬화 하면 원격 코드 실행(remote code execution), 서비스 거부(denial-oof-service)등의 공격으로 이어짐)

대안

  • JSON과 프로토콜 버퍼로 대체 가능
  • ObjectInputFilter를 사용하는 것도 방법
    • 이는 데이터 스트림이 역직렬화되기 전에 필터를 적용해서 특정 클래스를 받아들이거나 거부

결론

  • 직렬화는 위험하니 피하기
  • 시스템을 밑바닥부터 설계한다면 JSON이나 프로토콜 버퍼 같은 대안을 사용

reference

https://joeylee.tistory.com/37
https://github.com/Meet-Coder-Study/book-effective-java/blob/main/12%EC%9E%A5/85_%EC%9E%90%EB%B0%94_%EC%A7%81%EB%A0%AC%ED%99%94%EC%9D%98_%EB%8C%80%EC%95%88%EC%9D%84_%EC%B0%BE%EC%9C%BC%EB%9D%BC_%EC%9D%B4%ED%98%B8%EB%B9%88.md

0개의 댓글

관련 채용 정보