사용자가 올린 파일의 확장자를 검사했습니다. 실제 저장과 미리보기에는 어떤 보안 검증이 더 필요한가요?
잠깐, 답변을 보기 전에
먼저 내 말로 설명해 볼까요?
답변과 점검 포인트 펼치기답변 접기
구두 답변
정의를 외우기보다, 원리와 조건을 연결해 설명해 보세요.
확장자·클라이언트 MIME은 입력자가 지정할 수 있어 실제 내용과 안전성을 보장하지 않습니다. 허용 형식의 파싱·크기·자원 제한, 저장 경로 분리와 실행되지 않는 제공 방식을 함께 설계해야 합니다.
동작 원리와 전제
이미지로 보이는 파일도 파서 취약점이나 거대한 해상도로 CPU·메모리를 소모할 수 있습니다. 압축은 해제 후 총량·파일 수·중첩·경로를 제한합니다. 원래 파일명을 직접 저장 경로로 쓰지 않고 서버가 생성한 ID에 연결합니다.
선택과 실패 처리
미리보기 변환은 격리 프로세스에서 최소 권한으로 실행하고 외부 링크·매크로·스크립트 처리 정책을 정합니다. 공개 제공 origin과 Content-Type·Content-Disposition을 설정해 앱 권한으로 실행되지 않게 합니다. 악성코드 검사도 만능이 아니므로 다른 경계를 유지합니다.
구체적인 사례와 검증
업로드 URL은 임의 키를 덮어쓸 수 없도록 사용자·대상·기한과 연결합니다. 파일을 받으면 quarantine 상태로 두고 필요한 검사·변환을 거친 뒤 공개 상태로 전환할 수 있습니다. 이 사이 프로세스가 죽으면 미검사 객체와 DB 상태를 대사해 복구합니다. 이미지 변환이 성공해도 원본 파일을 별도 링크로 공개하면 위험한 내용이 남을 수 있어 원본·변환본의 공개 정책을 구분합니다. 압축의 작은 전송 크기를 신뢰하지 않고 해제 후 자원 상한을 강제합니다. 파일 업로드는 입력 저장 하나가 아니라 접수·검사·변환·공개·삭제의 전체 수명으로 설계하겠습니다.
잘못된 형식·큰 압축·경로 이탈·중복 업로드·변환 실패를 시험합니다. 업로드 접수와 검사 완료·공개 가능 상태를 나눠 미검사 파일을 먼저 노출하지 않습니다. 보관·삭제·접근권한과 로그에 원문 개인정보가 남는지도 확인합니다.
득점 포인트
이해가 드러나는 지점을 확인해 보세요.
- 핵심 구분: 확장자·클라이언트 MIME은 입력자가 지정할 수 있어 실제 내용과 안전성을 보장하지 않습니다.
- 선택 조건: 미리보기 변환은 격리 프로세스에서 최소 권한으로 실행하고 외부 링크·매크로·스크립트 처리 정책을 정합니다.
- 검증 기준: 잘못된 형식·큰 압축·경로 이탈·중복 업로드·변환 실패를 시험합니다.
감점 포인트
놓치기 쉬운 조건과 오해를 짚어 보세요.
- 확장자와 MIME이 맞으면 미검사 업로드를 바로 공개해도 된다고 한다.
더 파고들 거리
하나 더 질문하며 이해의 범위를 넓혀 보세요.
- 파일명과 압축 경로를 외부 입력에서 받을 때 실제 접근 대상이 허용 범위 안인지 어떻게 검증하나요?
- 비신뢰 실행의 파일·네트워크·자격·자원 수명을 어떤 경계로 제한하나요?
- 요청 본문 형식과 원하는 응답 형식을 어떤 헤더·캐시 정책으로 구분하나요?
득점·감점 포인트는 학습용 자기 점검 기준이며, 특정 회사의 실제 채점표가 아닙니다.
원리부터 공부하고 싶다면
답변을 보충하는 개념·예제·슈도코드를 읽어 보세요.