You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
reacted with thumbs up emoji reacted with thumbs down emoji reacted with laugh emoji reacted with hooray emoji reacted with confused emoji reacted with heart emoji reacted with rocket emoji reacted with eyes emoji
-
아이템 85 자바 직렬화의 대안을 찾으라
⚓️서론
이번에 처음 직렬화 부분을 들어가는 아이템 85를 맡았다.
이 책에서는 직렬화에 대해서 기본적으로 습득한 느낌으로 들어가고 있다.
직렬화를 조금 정리하고 들어가 보겠습니다.
➡️직렬화란 무엇인가?
위의 두 개를 합쳐서 직렬화라고 합니다.
➡️ 배경
보이지 않는 생성자
,API와 구현 사이의 모호해진 경계
,잠재적인 정확성 문제
,성능
,보안
,유지보수성
너무 많은 단점을 지닌다.➡️ 직렬화의 문제
✅ObjectInputStream
readObject()
메소드를 통해서 객체를 역직렬화한다.✅ 공격 범위
✅ 가젯(gadget)
가젯(gadget)
이라고 한다.✅ 역직렬화 폭탄(deserialization bomb)
역직렬화에 시간이 오래 걸리는 짧은 스트림을 역직렬화하는 것만으로도 서비스 거부 공격에 쉽게 노출될 수 있다. 이런 스트림을
역직렬화 폭탄
이라고한다.역직렬화 폭탄 예시 - HashSet과 문자열만 사용해서 만든 예시
위 코드의 객체 그래프는 201개의 HashSet 인스턴스로 구성되며, 그 각각은 3개 이하의 객체 참조를 갖는다.
스트림의 전체 크기는 5,744바이트지만, 역직렬화는 정말 오랫동안 진행될 것이다.
serialize
메서드가 수행되기 전의 인스턴스의 참조 형태를 보면 아래와 같은 형태이다.➡️해결책
글쓴이는 위의 표현을 비유를 통해서 알려준다. 표현이 좋아서 남겨놓음
“승리하는 유일한 길은 전쟁하지 않는 것이다.”
✅크로스-플랫폼 구조화된 데이터 표현(
Cross-platform structured-data representation
)✅직렬화를 피할 수 없고 역직렬화한 데이터가 안전한지 완전히 확실할 수 없을때
객체 역직렬화 필터링(java.io.ObjectInputFilter)를 사용하자. → 자바 9에 추가가되었음. 이전 버전에서도 사용 가능
객체 역직렬화 필터링은 데이터 스트림이 역직렬화되기 전에 필터를 설치하는 기능
클래스 단위로, 특정 클래스를 받아들이거나 거부할 수 있음
기본 수용모드
보통 화이트리스트 방식을 추천한다.
➡️핵심정리
참조
자바 직렬화, 그것이 알고싶다. 훑어보기편 | 우아한형제들 기술블로그
Beta Was this translation helpful? Give feedback.
All reactions