본문 바로가기
Q&A2021년 6월 16일1분 읽기

PHP 파일 업로드 취약점과 방어

한
한동욱
조회 651댓글 1

PHP 웹사이트에서 이미지 업로드 기능이 있는데, 해커가 PHP 파일을 업로드하면 어떻게 되나요?

댓글 1

김김영삼5년 전

파일 업로드 취약점은 웹쉘 업로드로 이어져 서버 전체 장악이 가능합니다.

우회 기법:

  • 확장자 우회: .php5, .phtml, .pht, .php.jpg
  • MIME 타입 변조: Content-Type을 image/jpeg로
  • 널 바이트: file.php%00.jpg (구버전)
  • 이중 확장자: file.php.jpg

안전한 방어:

// 1. 확장자 화이트리스트
$allowed = ['jpg', 'jpeg', 'png', 'gif'];
$ext = strtolower(pathinfo($name, PATHINFO_EXTENSION));
if (!in_array($ext, $allowed)) die("차단");

// 2. 파일 내용 검증 (매직 바이트)
$finfo = finfo_open(FILEINFO_MIME_TYPE);
$mime = finfo_file($finfo, $tmpPath);
if (!str_starts_with($mime, "image/")) die("차단");

// 3. 파일명 랜덤 변경
$newName = bin2hex(random_bytes(16)) . "." . $ext;

// 4. 업로드 디렉토리 실행 권한 제거
// .htaccess: php_flag engine off
Ctrl+Enter로 등록