카테고리 없음

[Effective Java] Item85. 자바 직렬화의 대안을 찾으라

📝 작성 : 2022.10.02  ⏱ 수정 : 
728x90

직렬화는 위험합니다. 직렬화의 위험성을 회피하는 가장 좋은 방법은 역직렬화는 하지 않는 것입니다.

직렬화가 위험한 이유는 공격 범위가 너무 넓고 지속적으로 더 넓어져 방어하기가 어렵기 때문입니다.
직렬화를 완전히 배제할 수 없을 때의 차선책은 신뢰할 수 없는 데이터는 절대 역직렬화하지 않는 것입니다. 특히, 신뢰할 수 없는 발신원으로부터의 RMI는 절대 수용해서는 안됩니다.
만약, 직렬화를 피할 수 없고 역직렬화한 데이터가 안전하지 완전히 확신할 수 없는 경우 객체 역직렬화 필터링(java.io.ObjectInputFilter)를 사용합니다. 이는 자바9에 추가되었고, 이전 버전에서도 사용가능하도록 이식되었습니다.

객체 역직렬화 필터링

데이터 스트림이 역직렬화되기 전에 필터를 설치하는 기능입니다. 클래슷 단위로, 특정 클래스를 받아들이거나 거부할 수 있습니다. '기본 수용'모드에서는 블랙리스트에 기록된 잠재적으로 위험한 클래스들을 거부합니다. 반대로 '기본 거부'모드에서는 화이트리스트에 기록된 클래스들만 수용합니다.

블랙리스트방식(기본수용)보다는 화이트리스트(기본거부)방식이 더 좋습니다. 블랙리스트 방식은 이미 알려진 위험으로부터만 보호할 수 있기 때문입니다.

SWAT

스왓(SWAT, Serial Wwhitelist Application Trainer)는 애플리케이션을 위한 화이트리스트를 자동으로 생성해주는 도구입니다.

반응형