Skip to content

ITEM 08. finalizer와 cleaner 사용을 피하라 #26

@VSFe

Description

@VSFe

<해당 과제는 카펀님 전용입니다.>

Java의 GC는 기본적으로 각 객체가 Phantom Reachable 상태가 되는 순간 GC 타겟이 된다고 할 수 있습니다.
finalize 메서드를 오버라이딩하게 되면, GC가 진행될 때 각 객체가 Phantom Reachable 이라고 인지된다면 해당 메서드를 호출하여 내부 실행을 유도하는 것 입니다.
문제는 �JVM의 GC는 일반적으로 발생 시기를 예측할 수 없기도 하고, 상황에 따라 죽은 객체를 예토전생 시킬 수 있는 (...) 문제까지 발생하기 때문에 사용이 권장되지 않습니다.

그렇기에, JDK 9 부터 등장한 Cleaner 인터페이스로 대부분이 변경되었습니다.

// ThreadPoolExecutor.java (JDK 11)
@Deprecated(since="9")
protected void finalize() {}

그렇다면, 어떻게 보안 취약점을 만들 수 있을까요? 해당 게시글 을 기반으로, 잘못된 finalize 메서드로 인해 발생하는 Security Hole 예시 코드를 작성해 주세요.

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type
No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions