웹사이트에 파일 업로드 기능을 만들 때는 단순히 저장만 구현하면 안 됩니다. 업로드 기능은 공격자가 서버에 악성 파일을 올리거나 저장 공간을 고갈시키거나 허용되지 않은 파일을 실행시키는 통로가 될 수 있습니다.
기본적으로 파일 크기 제한, 확장자 제한, MIME 타입 확인, 저장 경로 분리, 실행 권한 차단이 필요합니다. 업로드된 파일은 웹 서버가 직접 실행할 수 없는 위치에 저장하는 것이 안전합니다.
사용자가 올린 파일명을 그대로 저장하지 않는 편이 좋습니다. 파일명에는 특수 문자, 경로 조작 문자열, 개인정보가 포함될 수 있으므로 서버 내부에서는 임의의 고유 파일명으로 저장하고 원래 파일명은 별도 메타데이터로 관리하는 방식이 일반적입니다.
업로드 용량 제한도 반드시 필요합니다. 제한이 없으면 공격자가 큰 파일을 반복 업로드해 디스크를 가득 채울 수 있습니다. 업로드 실패, 삭제, 만료 처리, 비정상 요청에 대한 로그도 관리해야 합니다.
단, 로그에 비밀번호, 토큰, API 키 같은 비밀값이 남으면 안 됩니다. 보안 점검을 위한 기록과 개인정보 최소 수집 사이의 균형이 필요합니다.