WordPress "죄송합니다. 보안상의 이유로 이 파일 유형은 허용되지 않습니다." 해결 방법 (2026)
TL;DR
가장 깔끔한 해결책은 functions.php 또는 커스텀 플러그인에 upload_mimes 필터를 추가하는 것. iPhone HEIC 사진이라면 SnapPress로 기기에서 JPEG로 변환해 업로드하면 이 오류가 사라집니다.
짧은 답: 이 오류는 WordPress가 파일 확장자나 MIME 유형을 허용된 포맷으로 인식하지 못했다는 뜻입니다. 가장 깔끔한 영구 해결책은 functions.php나 커스텀 플러그인에 작은 upload_mimes 필터를 추가하는 것입니다. iPhone HEIC 사진을 업로드하는 경우라면 SnapPress 같은 도구로 업로드 전에 기기에서 JPEG로 변환하는 것이 가장 간단한 경로입니다. ALLOW_UNFILTERED_UPLOADS를 wp-config.php에 영구 해결책으로 활성화해서는 절대 안 됩니다 — WordPress의 모든 업로드 안전 검사를 꺼버리기 때문입니다.
WordPress에서 "죄송합니다. 보안상의 이유로 이 파일 유형은 허용되지 않습니다."를 만났다면, 당신만 그런 것이 아닙니다. 전 세계에서 가장 많이 검색되는 WordPress 오류 메시지 중 하나이며, 문구 자체가 오해를 부릅니다 — WordPress가 악성 코드를 탐지한 것이 아닙니다. 단지 고정된 허용 목록에 걸렸고, 파일 확장자나 MIME 유형이 그 목록에 없을 뿐입니다.
이 가이드에서는 오류가 발생하는 이유, 실제 운영 환경에서 검증된 4가지 영구 해결책, 각 접근법의 보안 트레이드오프, 그리고 파일 유형별 구체적인 해결책을 다룹니다. 끝까지 읽으면 어떤 방법이 자신의 상황에 맞는지, 그리고 그 과정에서 사이트를 깨뜨리지 않는 방법을 정확히 알게 됩니다.
이 오류가 발생하는 이유 (MIME 유형 허용 목록)
WordPress의 모든 업로드는 wp_check_filetype_and_ext() 함수를 통과합니다. 이 함수는 두 가지를 고정된 허용 목록과 대조합니다:
- 파일 확장자 (파일명에서 점 뒤의 부분)
- PHP의
finfo확장이 감지한 MIME 유형
둘 중 하나라도 get_allowed_mime_types()가 반환하는 목록에 없으면 업로드는 "죄송합니다. 보안상의 이유로 이 파일 유형은 허용되지 않습니다."와 함께 거부됩니다. 이 목록은 wp-includes/functions.php에 정의되어 있고 기본적으로 약 60개 항목 — 일반적인 이미지, 동영상, 오디오, 압축 파일, 문서 포맷 — 을 담고 있습니다.
'보안'이라는 표현이 붙은 이유는, 허용 목록의 본래 목적이 공격자가 실행 가능한 코드(PHP 파일, 셸 스크립트)를 업로드해 WordPress가 그것을 URL로 서빙하게 만드는 것을 막는 데 있었기 때문입니다. 그 좁은 의미에서 이 필터는 실제 보안 경계입니다. 하지만 같은 필터가, 단지 코어 목록에 포함되지 않았을 뿐인 수많은 정상 포맷까지 걸러냅니다:
- HEIC — iPhone 사진 (WordPress 6.7, 2024년 말에 추가)
- WebP (WordPress 5.8, 2021년에 추가)
- AVIF (WordPress 6.5, 2024년 3월에 추가)
- SVG (추가된 적 없음 — 플러그인이나 필터 필요)
- WOFF/WOFF2 폰트 (추가된 적 없음)
- STL, OBJ, GLB 3D 모델 포맷 (추가된 적 없음)
사용 중인 WordPress 버전이 해당 포맷이 추가되기 이전 것이거나, 호스팅이 최신 MIME 유형을 제거한 커스텀 빌드를 운영하고 있다면, 지원되어야 할 포맷에서도 이 오류를 만나게 됩니다.
임시 대처: 먼저 확장자와 파일을 확인하기
서버 설정을 바꾸기 전에, 두 가지 단순한 원인을 먼저 배제하세요:
확장자가 잘못되었거나 없는 경우
메신저 앱에서 내보낸 파일은 확장자를 잃거나 .bin 같은 범용 확장자가 붙는 경우가 있습니다. 파일을 우클릭해 올바른 확장자(.jpg, .png 등)로 이름을 바꾸고 다시 업로드해 보세요. 성공한다면 파일 내용은 멀쩡했고 확장자만 문제였던 것입니다.
파일이 손상된 경우
브라우저가 채팅이나 이메일에서 파일을 다운로드하다 중단되었다면 파일이 잘려 있을 수 있습니다. PHP의 finfo는 잘못된 MIME 유형을 감지합니다 — 파일이 이미지가 아니라 바이너리 쓰레기처럼 보이기 때문입니다. 원본을 출처에서 다시 다운로드해 재시도하세요.
이 두 가지 확인은 30초면 끝나고, 제가 보는 "이 파일 유형은 허용되지 않습니다" 신고의 약 20%를 해결합니다. 나머지 80%는 아래의 영구 해결책 중 하나가 필요한 진짜 허용 목록 문제입니다.
4가지 영구 해결책
해결책 1: upload_mimes 필터로 MIME 유형 추가 (권장)
운영 환경에서 가장 깔끔한 해결책입니다. 자식 테마의 functions.php에, 또는 — 더 나은 방법으로 — 테마 업데이트에도 변경 사항이 살아남도록 작은 커스텀 플러그인에 다음을 추가하세요:
<?php
add_filter('upload_mimes', function($mimes) {
$mimes['heic'] = 'image/heic';
$mimes['heif'] = 'image/heif';
return $mimes;
});
add_filter('wp_check_filetype_and_ext', function($data, $file, $filename, $mimes) {
$filetype = wp_check_filetype($filename, $mimes);
if (in_array($filetype['ext'], ['heic', 'heif'], true)) {
$data['ext'] = $filetype['ext'];
$data['type'] = $filetype['type'];
}
return $data;
}, 10, 4); heic와 image/heic를 필요한 확장자와 MIME 유형으로 바꾸세요. 첫 번째 필터는 해당 유형을 허용 목록에 추가합니다. 두 번째 필터는 미묘한 버그를 처리합니다: 많은 서버에서 PHP의 finfo가 흔치 않은 MIME 유형을 application/octet-stream으로 보고하는데, 이 때문에 확장자가 허용되어 있어도 wp_check_filetype_and_ext()가 업로드를 거부합니다. 두 번째 필터는 파일 확장자가 일치할 때 인식을 강제합니다.
HEIC에 특화된 더 자세한 안내는 WordPress Allowed MIME Types: How to Enable HEIC Uploads (2026 Guide)를 참고하세요.
해결책 2: 플러그인 사용 (WP Add Mime Types)
PHP를 편집하고 싶지 않다면, WP Add Mime Types 플러그인(무료, 80,000+ 설치, 2014년부터 활발히 유지 관리)이 확장자와 MIME 유형 두 열로 된 설정 패널을 제공합니다. 행을 추가하고 저장하면 끝입니다. 이 플러그인도 내부적으로 같은 upload_mimes 필터를 실행합니다.
운영 환경에서 검증된 대안 두 가지:
- File Upload Types by WPForms — HEIC, WebP, AVIF, SVG를 포함해 40개 이상의 포맷이 미리 등록된 체크박스 방식 UI. MIME 유형 문자열을 외우고 있지 않다면 최선의 선택입니다.
- Disable Real MIME Check — PHP의
finfo검증 단계를 끄는 단일 기능 플러그인. 확장자는 허용 목록에 있는데finfo가 MIME 유형을 잘못 보고하는 예외적인 경우에 유용합니다. 검증이 약해지는 트레이드오프가 있으므로 제한적으로 사용하세요.
해결책 3: wp-config.php의 ALLOW_UNFILTERED_UPLOADS (고급, 경고 포함)
WordPress에는 wp-config.php에 비상 탈출구가 있습니다:
define('ALLOW_UNFILTERED_UPLOADS', true); 이 상수를 설정하면 관리자는 PHP 스크립트를 포함한 모든 파일 유형을 업로드할 수 있습니다. 모든 MIME 유형 검사가 우회됩니다.
운영 환경에서는 사용하지 마세요. 이 상수는 WordPress의 모든 업로드 안전 검사를 꺼버립니다. 관리자 권한 계정 하나라도 탈취한 공격자는 PHP 파일을 wp-content/uploads에 직접 업로드해 실행할 수 있습니다. 오늘 안전해 보이는 환경도 오래된 플러그인이나 가져오기 작업에서 남은 "관리자 권한이 붙은 구독자" 계정이 잊힌 채 존재하는 경우가 많습니다.
유일하게 정당한 용도는 업로드 동작을 디버깅하는 로컬 개발 환경입니다. 스테이징에 푸시하기 전에 주석 처리하세요.
해결책 4: SnapPress로 기기에서 변환 (iPhone 사용자용)
특히 iPhone 사진 업로드라면, 가장 견고한 해결책은 파일이 서버에 도달하기 전에 기기에서 HEIC를 JPEG로 변환하는 것입니다. SnapPress는 사진 라이브러리에서 HEIC를 읽고, Apple이 iOS 릴리스마다 유지 관리하는 iOS 이미지 파이프라인으로 디코딩한 뒤, REST API를 통해 WordPress 미디어 라이브러리에 JPEG를 업로드합니다.
functions.php는 손대지 않습니다. upload_mimes 필터도 손대지 않습니다. 서버에 도착하는 파일은 2003년 이래 모든 WordPress 설치가 지원해 온 표준 JPEG입니다.
여러 WordPress 사이트를 관리하거나 PHP 편집이 부담스러운 사람에게 제가 권하는 경로입니다. 트레이드오프는 iPhone HEIC 케이스만 해결한다는 점입니다 — 다른 파일 유형에는 여전히 해결책 1-3 중 하나가 필요합니다.
파일 유형별 해결책
정확한 MIME 유형이 중요합니다. "죄송합니다. 보안상의 이유로 이 파일 유형은 허용되지 않습니다."를 만나는 가장 흔한 포맷에 대해, 운영 환경에서 검증된 항목을 정리했습니다.
HEIC (iPhone 사진)
$mimes['heic'] = 'image/heic';
$mimes['heif'] = 'image/heif'; 항상 둘 다 추가하세요. iPhone은 이미지 시퀀스와 버스트 촬영에서 가끔 .heif 파일을 생성합니다. 필터를 추가하면 WordPress 업로드는 완료됩니다 — 하지만 대부분의 방문자 브라우저는 HEIC를 렌더링하지 못하므로, 서버 측 변환(ShortPixel)이나 클라이언트 측 변환(SnapPress)도 필요합니다. 전체 내용은 iPhone HEIC 사진과 WordPress를 참고하세요.
WebP
$mimes['webp'] = 'image/webp'; WordPress 5.8(2021년 중반)이 WebP를 코어 허용 목록에 추가했습니다. WordPress 버전이 최신이라면 이 필터는 불필요합니다. 구버전 빌드나 커스텀 제한이 있는 호스팅이라면 이 필터로 WebP 업로드가 풀립니다.
SVG
$mimes['svg'] = 'image/svg+xml';
$mimes['svgz'] = 'image/svg+xml'; 필터에서 멈추지 마세요. SVG는 XML이라 관리자 브라우저에서 실행되는 인라인 JavaScript를 포함할 수 있습니다. 반드시 Safe SVG 플러그인(무료)을 설치하세요. SVG를 허용 목록에 올리는 동시에 svg-sanitizer 라이브러리로 들어오는 파일을 정화해 script 태그, 이벤트 핸들러, 외부 엔티티 참조를 제거합니다. 신뢰할 수 있는 디자이너만 SVG를 업로드해야 한다면 필터를 current_user_can('manage_options') 검사로 감싸세요.
AVIF
$mimes['avif'] = 'image/avif'; WordPress 6.5(2024년 3월)가 AVIF를 코어 허용 목록에 추가했습니다. 필터는 구버전 설치나 커스텀 호스팅에서만 필요합니다. AVIF는 동등한 체감 품질에서 HEIC보다 약 20% 더 작게 압축되고 브라우저 지원도 더 넓어, 서버에 libavif가 있다면 더 나은 전송 포맷입니다.
MP4 동영상
$mimes['mp4'] = 'video/mp4';
$mimes['m4v'] = 'video/mp4';
$mimes['mov'] = 'video/quicktime'; 이들은 보통 코어 허용 목록에 있지만, MP4에서 이 오류가 난다면 파일의 MIME 유형이 video/x-m4v나 application/octet-stream으로 감지되고 있는 경우가 많습니다. 해결책 1의 wp_check_filetype_and_ext 필터를 추가해 인식을 강제하세요.
ZIP 압축 파일
$mimes['zip'] = 'application/zip';
$mimes['7z'] = 'application/x-7z-compressed'; ZIP은 기본적으로 코어 허용 목록에 있지만, 일부 보안 플러그인(Wordfence, Sucuri)이 실행 가능한 내용을 담을 수 있다는 이유로 이를 덮어씁니다. WordPress 필터뿐 아니라 보안 플러그인 설정에서도 허용 목록에 등록하세요.
보안 고려 사항 (기본적으로 제한되는 이유)
WordPress가 파일 유형을 기본적으로 제한하는 핵심 이유는 하나입니다: 대부분의 서버 구성에서 wp-content/uploads의 PHP 파일은 코드로 실행될 수 있습니다. WordPress가 아무 확장자나 받아들인다면, 작성자나 기여자 계정 하나만 탈취한 공격자도 .php 셸을 업로드하고 그 URL에 접근해 서버에서 임의 코드를 실행할 수 있습니다.
허용 목록은 가장 저렴한 방어선입니다. 다른 모든 보안 계층 — 비밀번호 재사용, 플러그인 취약점, 공급망 공격 — 이 실패하더라도, 업로드 필터는 PHP가 uploads 디렉터리에 도달하는 것 자체를 막습니다.
허용 목록에 추가할 때의 세 가지 원칙:
- 실제로 필요한 것만 추가하세요. 한 달에 한 번 HEIC를 업로드한다면 HEIC만 추가하세요. 언젠가 필요할지도 모를 포맷을 미리 전부 허용하지 마세요.
- PHP, 실행 파일, 스크립트 확장자는 절대 허용하지 마세요.
.php,.phtml,.exe,.sh,.cgi,.pl— 어떤 상황에서도wp-content/uploads에 있어서는 안 됩니다. - 임베드 콘텐츠를 허용하는 포맷은 정화하세요. SVG(JavaScript), PDF(JavaScript 액션), HTML(전부). 정화 플러그인을 쓰거나 업로드 시 플랫 이미지 포맷으로 변환하세요.
해결책 1이 통하지 않을 때의 진단
필터를 추가하고 파일을 업로드했는데도 여전히 "죄송합니다. 보안상의 이유로 이 파일 유형은 허용되지 않습니다."가 보인다면, 세 가지를 확인하세요:
필터가 잘못된 위치에 있는 경우
필터가 담긴 파일이 실제로 로드되고 있는지 확인하세요. 자식 테마의 functions.php에 넣었는데 부모 테마가 활성화되어 있다면 스니펫은 실행되지 않습니다. 테마 의존성을 없애려면 커스텀 플러그인으로 옮기세요.
보안 플러그인이 허용 목록을 덮어쓰는 경우
Wordfence, Sucuri, iThemes Security 같은 플러그인은 WordPress 코어 위에 자체 업로드 검증을 추가합니다. upload_mimes 필터뿐 아니라 보안 플러그인 설정에서도 해당 MIME 유형을 허용 목록에 등록하세요.
PHP finfo가 잘못된 MIME 유형을 보고하는 경우
가장 흔한 조용한 실패입니다. 파일 확장자는 허용 목록에 있는데, PHP의 finfo 모듈이 기대되는 MIME 유형 대신 application/octet-stream을 반환합니다. WordPress는 불일치를 보고 거부합니다. 해결책 1의 wp_check_filetype_and_ext 필터가 이 케이스를 처리합니다. upload_mimes 필터와 별도가 아니라 함께 포함되어 있는지 확인하세요.
WordPress 업로드 실패에 대한 더 넓은 진단 체크리스트는 Cannot Upload Images to WordPress? 8 Causes and How to Fix Each One을 참고하세요.
iPhone 사진 업로드: 이 오류를 완전히 피하는 워크플로
위의 모든 내용은 HEIC, SVG, AVIF 등의 원본 파일을 WordPress 미디어 라이브러리에 직접 업로드하는 경우를 위한 것입니다. iPhone 사진 워크플로에 한해서는 더 간단한 경로가 있습니다: 업로드 전에 기기에서 변환하는 것입니다.
SnapPress는 사진 라이브러리에서 HEIC를 읽고, Apple이 iOS 릴리스마다 유지 관리하고 업데이트하는 iOS 이미지 파이프라인으로 디코딩한 뒤, REST API를 통해 WordPress 미디어 라이브러리에 JPEG를 업로드합니다. 도착하는 파일이 표준 JPEG이기 때문에 "죄송합니다. 보안상의 이유로 이 파일 유형은 허용되지 않습니다."를 다시는 보지 않게 됩니다 — 이 사이트에서도, 연결하는 다른 어떤 WordPress 사이트에서도요.
iPhone에서 WordPress로 대량 게시하는 워크플로는 스마트폰에서 WordPress에 이미지 일괄 업로드하기: 완전 가이드의 비교와 WordPress 사진 업로드 앱 5개 비교의 앱 정리를 참고하세요.
요약
- 이 오류는 파일 확장자나 MIME 유형이
get_allowed_mime_types()가 반환하는 WordPress 허용 목록에 없다는 뜻입니다. - 가장 깔끔한 해결책: 커스텀 플러그인에
upload_mimes필터 추가 (해결책 1). - 노코드 해결책: WP Add Mime Types 또는 File Upload Types 플러그인 (해결책 2).
- 영구 해결책으로는 절대 금지:
wp-config.php의ALLOW_UNFILTERED_UPLOADS(해결책 3). - iPhone HEIC 워크플로: SnapPress로 기기에서 변환해 WordPress에 도달하기 전에 JPEG로 만들기 (해결책 4).
iPhone 사진을 WordPress에 정기적으로 게시한다면, 기기 내 변환 경로가 이 오류 클래스를 통째로 없애줍니다. SnapPress를 무료로 시작하고 SnapPress Connect WordPress 플러그인으로 연결하면, 다음에 공유 시트에서 사진을 선택할 때 필터도, 플러그인도, 서버의 wp-config.php 변경도 없이 JPEG로 업로드됩니다.
자주 묻는 질문
WordPress는 왜 특정 파일 유형을 차단하나요?
WordPress는 모든 업로드를 wp_check_filetype_and_ext() 함수를 통해 get_allowed_mime_types()가 반환하는 고정된 허용 목록과 대조해 검증합니다. "보안상의 이유"라는 메시지는 파일 확장자나 MIME 유형이 그 목록에 없다는 뜻입니다. 원래 목적은 공격자가 이미지로 위장한 실행 가능한 PHP 파일을 업로드하는 것을 막기 위함이었지만, 같은 필터가 HEIC, AVIF, SVG처럼 사용 중인 WordPress 버전이 출시될 당시 코어 목록에 없었던 정상적인 포맷까지 걸러냅니다. 해결책은 필터로 MIME 유형을 추가하거나, 업로드 전에 파일을 허용된 포맷으로 변환하는 것입니다.
사용자 지정 파일 유형을 허용해도 안전한가요?
대체로 안전하지만 선별이 필요합니다. 이미지 포맷(HEIC, AVIF, WebP)과 미디어 컨테이너(MP4, MOV)는 코드로 실행될 수 없으므로 upload_mimes 필터에 추가해도 안전합니다. 유일하게 주의가 필요한 이미지 포맷은 SVG입니다. SVG는 XML이라 인라인 JavaScript를 포함할 수 있으므로, SVG를 허용한다면 Safe SVG 같은 정화 플러그인도 함께 설치하세요. ALLOW_UNFILTERED_UPLOADS를 wp-config.php에 영구 해결책으로 사용해서는 절대 안 됩니다. 이 상수는 PHP 직접 업로드를 막는 검사를 포함해 WordPress의 모든 업로드 안전 검사를 꺼버립니다.
PHP 필터와 플러그인 중 어느 쪽이 좋은가요?
직접 관리하는 MIME 유형이 한두 개라면 자식 테마 functions.php 또는 작은 커스텀 플러그인에 넣는 upload_mimes 필터가 가장 깔끔합니다. 다섯 줄이면 끝나고, 플러그인 오버헤드도 없으며, 플러그인 경로를 쓰면 테마 업데이트에도 살아남습니다. 파일 유형이 다섯 개 이상이거나 PHP를 편집하지 않는 사용자라면 WP Add Mime Types나 File Upload Types 같은 플러그인이 정답입니다. 둘 다 내부적으로 같은 WordPress 필터를 실행하므로 성능 차이는 없습니다. 속도가 아니라 코드 편집에 익숙한지 여부로 선택하세요.
iPhone의 HEIC 파일을 허용하려면 어떻게 하나요?
functions.php 또는 커스텀 플러그인에 다음 스니펫을 추가하세요: add_filter('upload_mimes', function($m) { $m['heic'] = 'image/heic'; $m['heif'] = 'image/heif'; return $m; });. WordPress 6.7부터 HEIC가 코어 허용 목록에 추가되어 6.7 이상의 새 설치에서는 이 필터가 이미 불필요할 수 있지만, 많은 공유 호스팅이 최신 MIME 유형을 제거한 커스텀 WordPress 빌드를 제공합니다. iPhone 사진의 현명한 경로는 SnapPress 같은 도구로 기기에서 JPEG로 변환하는 것입니다. 서버에 도착하는 파일이 어떤 WordPress 설치도 거부한 적 없는 표준 JPEG가 됩니다.
SVG 파일을 안전하게 허용하려면 어떻게 하나요?
단순히 image/svg+xml을 upload_mimes 필터에 추가하는 것으로 끝내면 안 됩니다. SVG는 XML이라 관리자 브라우저에서 실행되는 인라인 JavaScript나 외부 참조를 포함할 수 있습니다. 무료 플러그인 Safe SVG를 설치하세요. SVG MIME 유형을 허용 목록에 올리는 동시에 svg-sanitizer 라이브러리로 들어오는 파일을 정화해 script 태그, 이벤트 핸들러, 외부 엔티티 참조를 제거합니다. 신뢰할 수 있는 디자이너의 업로드에만 SVG가 필요하다면, 필터를 current_user_can('manage_options') 검사와 결합해 관리자에게만 SVG를 허용할 수도 있습니다.
functions.php를 편집하다 사이트가 깨지면 어떻게 하나요?
우선 당황하지 마세요. 흰 화면은 거의 항상 추가한 스니펫의 세미콜론 누락이나 괄호 불일치 때문입니다. SFTP나 호스팅 파일 관리자로 접속해 wp-content/themes/사용중인-테마/functions.php를 열어 깨진 스니펫을 제거하고 저장하면 사이트가 복구됩니다. 파일을 편집할 수 없다면 모든 호스팅의 제어판에 "원클릭 PHP 오류 로그"나 "테마 초기화" 옵션이 있습니다. 앞으로는 functions.php를 자식 테마를 통해 편집하거나 — 더 나은 방법으로 — 커스텀 필터를 작은 커스텀 플러그인에 넣으세요. 코드 오류가 사이트 전체를 깨뜨리는 대신 플러그인 하나만 비활성화됩니다.