버그나 보안 문제를 줄이기 위해 직렬화 프록시 패턴이 있다 직렬화 프록시 패턴 바깥 클래스의 논리적 상태를 정밀하게 표현하는 중첩 클래스를 설계해 private static으로 선언한다. 이 중첩 클래스가 바깥 클래스의 직렬화 프록시다. 중첩 클래스의 생성자는 단 하나여야 하며, 바깥 클래스를 매개변수로 받아야 한다. 생성자는 유효성 검사 및 방어적 복사 없이 단순히 인스턴스의 데이터를 복사한다. 바깥 클래스와 직렬화 프록시 모두 Serializable을 구현한다. private static class SerializationProxy implements Serializable { private final Date start; private final Date end; SerializationProxy(..
public final class Period { private final Date start; private final Date end; /** * @param start 시작 시각 * @param end 종료 시각; 시작 시각보다 뒤여야 한다. * @throws IllegalArgumentException 시작 시각이 종료 시각보다 늦을 때 발생한다. * @throws NullPointerException start나 end가 null이면 발행한다. */ public Period(Date start, Date end) { this.start = new Date(start.getTime()); this.end = new Date(end.getTime()); if(this.start.compareTo(t..
Serializable 구현 클래스 선언에 implements Serializable만 붙이면 된다 Serializable 구현의 문제 Serializable을 구현하면 릴리스한 뒤에는 수정하기 어렵다 직렬화 형태도 하나의 공개 API 가 된다 기본 직렬화 형태에서는 private와 package-private 인스턴스 필드들 마저 api로 공개하는 꼴이 된다(캡슐화 깨짐) 직렬화가 클래스 개선을 방해한다 UID(명시하지 않으면 런타임시 자동으로 생성해줌)를 생성할때 클래스 멤버들이 고려한다 나중에 수정을 한다면 UID 변한다 버그와 보안 구멍이 생길 위험이 높다 생성자를 사용해서 만드는게 기본인데 기본 메커니즘을 우회하는 객체 생성 기법이다 기본 역직렬화를 사용하면 불변식 깨짐과 허가되지 않은 접근에 ..
직렬화란? 자바가 객체를 바이트 스트림 으로 인코딩하고(직렬화) 그 바이트 스트림으로부터 다시 객체를 재구성하는 (역직렬화) 메커니즘이다. 직렬화의 단점 직렬화의 근본적인 문제는 공격 범위가 너무 넓고 지속적으로 더 넓어져 방어하기 어렵다는 점이다 바이트 스트림을 역직렬화하는 과정에서 readObject 메서드는 그 타입들 안의 모든 코드를 수행할수 있다 신뢰할 수 없는 스트림을 역직렬화 하면 원격 코드 실행(remote code execution), 서비스 거부(denial-oof-service)등의 공격으로 이어질수 있다 가젯 메서드 역직렬화 과정에서 호출되어 잠재적으로 위험한 동작을 수행하는 메서드 static byte[] bomb() { Set root = new HashSet(); Set s1 ..
- Today
- Yesterday
- Observer Pattern
- reactive stream
- Spring
- LAMBDA
- concurrency
- 영속성
- Serialize
- jdk11
- object
- Effective JAVA
- 디자인패턴
- Design Pattern
- Concurrecy
- iterable
- JMeter
- jvm
- reactive
- strategy
- Java
- exception
- template method
- 메인보드#asrock b650m #조립pc #후기이벤트
- Serializable
- 부하테스트
- Redis
- in-memory
- gslb
- nosql
- template
- observable
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |