역직렬화 필터
공격을 방지하기 위해 역직렬화 가능한 클래스를 제한합니다.
코드 비교
✕ Java 8
// Dangerous: accepts any class
ObjectInputStream ois =
new ObjectInputStream(input);
Object obj = ois.readObject();
// deserialization attacks possible!
✓ Java 9+
ObjectInputFilter filter =
ObjectInputFilter.Config
.createFilter(
"com.myapp.*;!*"
);
ois.setObjectInputFilter(filter);
Object obj = ois.readObject();
이 코드에 문제가 있나요? 알려주세요.
모던 방식이 더 나은 이유
보안
예상치 못한/악성 클래스의 역직렬화를 방지합니다.
세밀한 제어
깊이, 배열 크기, 참조 횟수, 클래스 패턴을 제어합니다.
JVM 전체
JVM의 모든 역직렬화에 대한 전역 필터를 설정합니다.
이전 방식
모든 것 허용
모던 방식
ObjectInputFilter
JDK 버전
9
난이도
고급
JDK 지원
역직렬화 필터
사용 가능
JDK 9 (2017년 9월) 이후 널리 사용 가능
동작 원리
ObjectInputFilter를 통해 클래스를 허용 목록/거부 목록에 추가하고, 객체 그래프 깊이, 배열 크기, 참조 횟수를 제한할 수 있습니다. 외부 라이브러리 없이 역직렬화 취약점을 방어합니다.
관련 문서