BOARD

팁·활용

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

페이지 정보

profile_image
작성자 최고관리자
댓글 0건 조회 35회 작성일 26-09-15 05:09

본문

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 권한을 부여합니다.

함께 보면 좋은 글

참고자료

기타 참고자료

댓글목록

등록된 댓글이 없습니다.