PHP 파일 업로드 보안 처리 가이드: isuploadedfile 및 moveuploadedfile 사용
페이지 정보

본문
PHP 파일 업로드 보안 처리 가이드: isuploadedfile 및 moveuploadedfile 사용
그누보드 운영 및 수정 과정에서 파일 업로드 기능을 구현할 때 발생할 수 있는 보안 취약점을 방지하고, 안전하게 파일을 검증·이동·난수화하는 방법을 알아봅니다.
업로드 여부 검증 및 다층 방어
HTTP POST를 통해 업로드된 파일이 실제로 정상적인 경로로 업로드되었는지 확인하려면 is_uploaded_file() 함수를 사용해야 합니다. 단일 검증에만 의존하지 않고, 허용된 파일 확장자(gif, jpg, jpeg, png)인지 확인하고 업로드 허용 용량($max_file_size)을 함께 검사하는 다층 방어 기법을 적용해야 안전합니다.
검증 코드 예시
if (!is_uploaded_file($_FILES['uploadedfile']['tmp_name'])) {
exit('업로드된 파일이 아닙니다.');
}
파일 이동 처리: moveuploadedfile()
임시 디렉토리에 저장된 파일을 원하는 목적지 디렉토리로 옮길 때 일반적인 copy() 함수를 사용하면 보안상 위험할 수 있습니다. 업로드된 파일인지를 안전하게 확인하면서 지정된 경로로 이동시키려면 moveuploadedfile() 함수를 사용해야 합니다.
move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $target_path);
파일명 난수화 및 권한 설정
동일한 파일명이 업로드되어 덮어씌워지는 문제를 방지하고 보안을 강화하기 위해 타임스탬프와 난수를 조합하여 새로운 파일명을 생성하고, 업로드된 파일에 적절한 권한을 부여할 수 있습니다.
파일명 난수화 및 이동 코드 예시
타임스탬프(time())와 rand() 함수를 활용하여 새로운 파일명을 만들고 지정된 경로($target_path)로 파일을 이동시킨 뒤 파일 권한을 설정하는 방법은 다음과 같습니다.
$uptime = time();
$instfile = $uptime . chr(rand(65, 90)) . '.' . $extension;
$target_path = $uploaddir . $instfile;
move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $target_path);
@chmod($target_path, 0606);
$uptime: 현재 타임스탬프를 구하여 기본 파일명으로 사용합니다.chr(rand(65, 90)): 대문자 알파벳 범위의 난수를 문자로 변환하여 조합합니다.move_uploaded_file(): 임시 디렉토리에 저장된 파일을 난수화된 새 경로($target_path)로 안전하게 이동합니다.@chmod($target_path, 0606): 업로드된 파일에0606권한을 부여합니다.
함께 보면 좋은 글
- php.ini 설정과 웹 서버 옵션 조정을 통한 파일 업로드 용량 제한 변경 방법
- 그누보드4 게시글 삭제 및 수정 시 생성된 썸네일 파일 자동 삭제 처리 방법
- 웹 서버에서의 PHTML 및 SHTML 파일 확장자 처리 이해
참고자료
기타 참고자료
- 이전글그누보드 최고관리자 권한 확장 및 회원 정보 수정 방법 26.09.15
- 다음글그누보드 이미지 업로드 시 자동 워터마크 삽입 구현 방법 26.09.15
댓글목록
등록된 댓글이 없습니다.