ONE QUESTION AT A TIME.

천천히 생각하고, 분명하게.

TODAY’S QUESTION1303 / 1500
보안난이도 중하5분 답변 목표 · 보강본

외부 입력을 객체로 역직렬화하면 편합니다. JSON 파싱과 임의 객체 복원의 보안 차이는 무엇인가요?

잠깐, 답변을 보기 전에
먼저 내 말로 설명해 볼까요?

답변과 점검 포인트 펼치기답변 접기
01

구두 답변

정의를 외우기보다, 원리와 조건을 연결해 설명해 보세요.

단순 데이터 파싱과 클래스 생성·후크·코드 실행을 포함할 수 있는 객체 복원은 공격 표면이 다릅니다. 비신뢰 입력을 일반적인 객체 직렬화 형식으로 복원하면 생성 과정에서 예기치 않은 코드가 실행될 수 있습니다.

동작 원리와 전제

형식이 바이너리인지 텍스트인지보다 파서가 어떤 타입과 동작을 허용하는지 봅니다. 안전한 데이터 형식과 명시적인 스키마·타입 허용 목록을 사용하고 임의 클래스 이름을 입력이 선택하게 하지 않습니다. 서명된 데이터도 키·출처·재생·버전 검증이 필요합니다.

선택과 실패 처리

JSON도 깊이·크기·중복 키·숫자 범위·후속 병합에서 문제가 생길 수 있어 제한합니다. 파싱 성공 뒤 인가·도메인 검증을 수행하고 입력 객체가 내부 prototype이나 설정을 오염시키지 않게 합니다.

구체적인 사례와 검증

원격 데이터가 클래스 이름과 속성을 지정하고 라이브러리가 그 클래스를 자동 생성한다면 생성자·복원 후크의 실행이 공격면이 될 수 있습니다. 신뢰하지 않는 입력에는 데이터 전용 구조를 사용하고 필요한 필드만 검증된 내부 객체로 변환합니다. JSON도 재귀 병합이나 동적 함수 선택에 사용하면 후속 코드에서 위험해질 수 있어 파싱 단계와 실행 단계를 분리합니다. 입력 크기 제한은 전송 바이트뿐 아니라 파싱 후 객체 수·깊이·메모리 사용도 고려합니다. 정상 형식의 매우 큰 데이터가 서비스를 고갈시키지 않도록 timeout·자원 예산과 오류 처리를 함께 시험합니다.

깊은 중첩·거대한 배열·타입 혼동·오래된 스키마를 격리 테스트합니다. 파서 라이브러리와 옵션을 유지보수하고 알려진 위험한 복원 기능을 피합니다. 편리한 자동 객체 복원보다 좁은 데이터 계약이 보안과 호환성에 유리한 경우가 많습니다.

02

득점 포인트

이해가 드러나는 지점을 확인해 보세요.

  • 핵심 구분: 단순 데이터 파싱과 클래스 생성·후크·코드 실행을 포함할 수 있는 객체 복원은 공격 표면이 다릅니다.
  • 선택 조건: JSON도 깊이·크기·중복 키·숫자 범위·후속 병합에서 문제가 생길 수 있어 제한합니다.
  • 검증 기준: 깊은 중첩·거대한 배열·타입 혼동·오래된 스키마를 격리 테스트합니다.
03

감점 포인트

놓치기 쉬운 조건과 오해를 짚어 보세요.

  • JSON이나 서명된 직렬화 데이터는 후속 객체 복원도 항상 안전하다고 한다.
04

더 파고들 거리

하나 더 질문하며 이해의 범위를 넓혀 보세요.

  • 형식 검사를 통과한 값이 실제 자원·권한·업무 규칙도 맞는지 어떤 추가 검증을 하나요?
  • 파싱한 외부 키를 동적 병합할 때 상속 속성과 내부 정책이 오염되지 않게 어떻게 하나요?
  • 파싱은 성공하지만 새 필드·상태의 의미를 구버전이 잘못 해석하면 어떤 전환이 필요한가요?

득점·감점 포인트는 학습용 자기 점검 기준이며, 특정 회사의 실제 채점표가 아닙니다.

원리부터 공부하고 싶다면

답변을 보충하는 개념·예제·슈도코드를 읽어 보세요.

← 전체 질문 보기