Comments (2)
자바의 역직렬화는 데이터나 객체를 원래의 상태로 복원하는 과정
서버가 클라이언트로부터 받은 직렬화된 데이터를 역직렬화하여 사용하는데, 클라이언트가 제공하는 직렬화된 데이터가 고도로 변조되거나 수정될 수 있다.
그래서 클라이언트가 마음대로 확장 가능한 경우를 역직렬화 시점에서 허용하는 것은 크게 위험
이 문제를 메모리와 연관지어 설명하면, 클라이언트가 제공한 데이터를 역직렬화하면서 객체를 생성하게 되는데, 이 때 공격자(클라이언트)가 엄청난 양의 데이터를 보내거나 의도적으로 복잡한 객체 그래프를 만들어내면서 서버의 메모리를 과도하게 차지하게 할 수 있습니다. 이렇게 되면 서버의 메모리 사용량이 급격히 증가하여 서비스를 제대로 제공하지 못하게 되거나, 심각한 경우 서버가 다운되는 결과를 초래할 수 있습니다.
또한, 악의적인 클라이언트는 역직렬화 과정에서 특정 코드가 실행되도록 조작된 데이터를 보낼 수도 있습니다. 이렇게 되면 역직렬화 과정에서 예상치 못한 코드가 실행되어 시스템에 보안 취약점을 만들거나, 기타 다른 보안 이슈를 초래할 수 있습니다.
따라서, 자바의 역직렬화 과정에서는 클라이언트가 보낸 데이터를 신뢰하지 않고, 역직렬화를 진행하기 전에 적절한 유효성 검사와 필터링을 수행하는 것이 중요합니다.
from effective-java-study.
OWASP
- Deserialization of untrusted data
- NVD Categorization, CWE-502: Deserialization of Untrusted Data: The application deserializes untrusted data without sufficiently verifying that the resulting data will be valid.
- https://owasp.org/www-community/vulnerabilities/Deserialization_of_untrusted_data
블랙햇 USA 2016
from effective-java-study.
Related Issues (20)
- [Item58] 전통적인 for 문보다는 for-each 문을 사용하라
- [Item59] 라이브러리를 익히고 사용하라
- [Item60] 정확한 답이 필요하다면 float와 double은 피하라
- [Item61] 박싱된 기본 타입보다는 기본 타입을 사용하라
- [Item62] 다른 타입이 적절하다면 문자열 사용을 피하라
- [Item63] 문자열 연결은 느리니 주의하라
- [Item64] 객체는 인터페이스를 사용해 참조하라
- [Item65] 리플렉션보다는 인터페이스를 사용하라
- [Item66] 네이티브 메서드는 신중히 사용하라 HOT 1
- [Item67] 최적화는 신중히 하라
- [Item68] 일반적으로 통용되는 명명 규칙을 따르라
- [Item69] 예외는 진짜 예외 상황에만 사용하라
- [Item70] 복구할 수 있는 상황에는 검사 예외를, 프로그래밍 오류에는 런타임 예외를 사용하라
- [Item71] 필요 없는 검사 예외 사용은 피하라
- [Item72] 표준 예외를 사용하라
- [Item73] 추상화 수준에 맞는 예외를 던지라
- [Item74] 메서드가 던지는 모든 예외를 문서화하라
- [Item75] 예외의 상세 메시지에 실패 관련 정보를 담으라
- [Item76] 가능한 한 실패 원자적으로 만들라
- [Item77] 예외를 무시하지 말라
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from effective-java-study.