Open HanaHww2 opened 1 year ago
직렬화: 객체 -> 바이트 스트림 역직렬화: 바이트 스트림 -> 객체
@DisplayName("역직렬화 폭탄 테스트") @Test void deserializeBomb() { byte[] bomb = bomb(); // 역직렬화를 하면 엄청 많은 시간이 걸린다. deserialize(bomb); assertThat(bomb).isNotEmpty(); } static byte[] bomb() { Set<Object> root = new HashSet<>(); Set<Object> s1 = root; Set<Object> s2 = new HashSet<>(); for (int i = 0; i < 100; i++) { Set<Object> t1 = new HashSet<>(); Set<Object> t2 = new HashSet<>(); t1.add("foo"); s1.add(t1); s1.add(t2); s2.add(t1); s2.add(t2); s1 = t1; s2 = t2; } return serialize(root); // 직렬화 수행 }
{: width="50%" height="50%"} => 200개의 객체만으로 2**100의 call을 유발하는 가성비좋은(?) 공격
직렬화에 대해서 더 자세히 알게 되었습니다.
직렬화
직렬화: 객체 -> 바이트 스트림 역직렬화: 바이트 스트림 -> 객체
왜 직렬화를 사용하는가?
직렬화가 왜 문제가 되나?
역직렬화 폭탄
{: width="50%" height="50%"} => 200개의 객체만으로 2**100의 call을 유발하는 가성비좋은(?) 공격
대처는 어떻게?