ONE QUESTION AT A TIME.

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

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

외부 JSON을 설정 객체에 재귀 병합합니다. 단순 속성 복사가 prototype 오염으로 이어질 수 있나요?

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

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

구두 답변

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

비신뢰 키를 동적 속성 접근·재귀 병합에 사용하면 구현에 따라 객체의 prototype 경로나 공유 기본값을 오염시킬 수 있습니다. JSON 파싱 성공 자체가 후속 병합의 안전성을 보장하지 않습니다.

동작 원리와 전제

허용된 설정 키와 중첩 구조를 스키마로 제한하고 prototype 관련 특수 경로를 처리하는 라이브러리의 보안 상태를 확인합니다. 상속된 속성과 own property를 구분하며 권한 판단에서 임의 객체의 truthy 필드를 신뢰하지 않습니다.

선택과 실패 처리

Map이나 null-prototype 객체가 적합할 수 있지만 모든 후속 코드가 같은 가정을 유지해야 합니다. 입력을 denylist 몇 개로만 정리하기보다 필요한 필드를 새 객체에 명시적으로 복사합니다. 타입·길이·깊이 제한도 적용합니다.

구체적인 사례와 검증

설정에서 admin 필드를 읽을 때 own property인지 확인하지 않고 상속된 값을 사용하면 오염된 prototype이 권한 판단에 영향을 줄 수 있습니다. 권한은 외부 설정 객체의 임의 필드가 아니라 검증된 인증 문맥에서 얻어야 합니다. 입력을 새 객체에 명시적으로 매핑하면 불필요한 속성이 내부로 들어오는 일을 줄일 수 있지만 nested 데이터도 같은 검사를 적용합니다. 라이브러리 업데이트 후에도 병합 옵션·경로 구분 규칙을 회귀 테스트합니다. JSON 문법의 안전성과 그 값이 어떤 코드 경로에서 사용되는지는 별개라는 점을 보안 리뷰에 포함하겠습니다.

허가된 테스트에서 특수 키·중첩 병합·상속 속성·기본 설정 변경을 확인합니다. 오염이 발생하지 않더라도 사용자 설정이 권한·외부 URL을 바꿀 수 있는지 인가를 검사합니다. 객체 표현의 안전성과 업무 권한은 별도 경계입니다.

02

득점 포인트

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

  • 핵심 구분: 비신뢰 키를 동적 속성 접근·재귀 병합에 사용하면 구현에 따라 객체의 prototype 경로나 공유 기본값을 오염시킬 수 있습니다.
  • 선택 조건: Map이나 null-prototype 객체가 적합할 수 있지만 모든 후속 코드가 같은 가정을 유지해야 합니다.
  • 검증 기준: 허가된 테스트에서 특수 키·중첩 병합·상속 속성·기본 설정 변경을 확인합니다.
03

감점 포인트

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

  • JSON.parse만 사용하면 이후 동적 병합과 권한 판단도 안전하다고 한다.
04

더 파고들 거리

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

  • own property와 prototype에서 찾은 값이 권한·설정 판단에 어떤 차이를 만들나요?
  • 데이터 파싱과 임의 객체 생성·후크 실행의 신뢰 경계를 어떻게 나누나요?
  • 설정 하나의 타입뿐 아니라 여러 값의 조합과 실제 적용 버전을 어떻게 검증하나요?

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

원리부터 공부하고 싶다면

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

← 전체 질문 보기