ONE QUESTION AT A TIME.

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

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

다운로드 API가 파일명을 받아 로컬 경로에 붙입니다. ../를 제거하면 경로 이탈을 막을 수 있나요?

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

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

구두 답변

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

문자열 치환만으로는 인코딩·경로 구분자·절대 경로·심볼릭 링크의 다양한 해석을 통제하기 어렵습니다. 사용자 입력을 직접 경로로 쓰기보다 허용된 파일 ID를 서버의 검증된 경로에 매핑하는 방식을 우선합니다.

동작 원리와 전제

경로를 조합할 경우 기준 디렉터리와 정규화한 실제 대상의 관계를 확인합니다. 단순 문자열 prefix는 비슷한 이름의 형제 디렉터리를 허용할 수 있습니다. 검증 뒤 symlink가 바뀌는 TOCTOU도 있어 파일 핸들 기반 접근과 OS의 안전한 옵션을 검토합니다.

선택과 실패 처리

읽기·쓰기 권한과 파일 유형을 제한하고 업로드 압축 해제도 항목별 경로·크기·링크를 검사합니다. 파일명에서 위험 문자를 지워 다른 정상 파일명과 충돌시키는 방식도 피합니다. 공개 이름과 저장 이름을 분리할 수 있습니다.

구체적인 사례와 검증

예를 들어 기준 경로 /data/uploads의 문자열 prefix만 검사하면 /data/uploads-old 같은 형제 경로가 잘못 포함될 수 있습니다. 경로 구성 요소와 실제 해석 결과로 범위를 비교해야 합니다. 심볼릭 링크가 허용되면 정규화한 문자열이 안쪽이어도 실제 대상은 밖일 수 있습니다. 가능한 OS의 directory-relative open과 링크 처리 옵션을 사용해 검사와 접근을 가깝게 묶습니다. 압축 해제도 각 항목의 경로를 검사하고 기존 파일 덮어쓰기·링크·크기 제한을 적용합니다. 파일을 읽을 수 없을 때 전체 내부 경로를 오류 응답으로 노출하지 않는지도 확인하겠습니다.

상대·절대 경로·인코딩·symlink·중첩 압축을 합성 데이터로 시험합니다. 권한 없는 파일이 오류 메시지·존재 확인으로 노출되는지도 봅니다. 경로 파싱 정확성과 자원 접근권한은 함께 강제해야 합니다.

02

득점 포인트

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

  • 핵심 구분: 문자열 치환만으로는 인코딩·경로 구분자·절대 경로·심볼릭 링크의 다양한 해석을 통제하기 어렵습니다.
  • 선택 조건: 읽기·쓰기 권한과 파일 유형을 제한하고 업로드 압축 해제도 항목별 경로·크기·링크를 검사합니다.
  • 검증 기준: 상대·절대 경로·인코딩·symlink·중첩 압축을 합성 데이터로 시험합니다.
03

감점 포인트

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

  • ../ 문자열을 제거하면 모든 경로 이탈이 해결된다고 한다.
04

더 파고들 거리

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

  • 비신뢰 실행의 파일·네트워크·자격·자원 수명을 어떤 경계로 제한하나요?
  • 새 파일을 부분 노출 없이 게시하면서 동시 writer와 내구성을 어떻게 따로 보호하나요?
  • 유효하게 로그인한 주체라도 해당 자원을 변경할 수 있는지는 어디에서 검사하나요?

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

원리부터 공부하고 싶다면

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

← 전체 질문 보기