파일 타입 탐지 (매직 바이트)
파일 드롭 → 매직 바이트로 진짜 포맷 식별, 확장자·선언된 MIME가 거짓말하는 파일 적발.
사용법
- 임의 파일 드롭 또는 선택.
- 감지된 타입 확인 — 선언된 것과 다르면 뱃지로 알림.
- 감지된 MIME 타입을 복사해 Content-Type 헤더나 업로드 허용 목록에 사용하세요.
자세한 설명
펼치기접기
파일을 끌어다 놓으면 브라우저에서 앞 512바이트를 읽어 약 35가지 시그니처 표와 대조합니다. PNG, JPEG, GIF, WebP, TIFF, PDF, ZIP, GZIP, XZ, 7z, RAR, TAR, MP3, FLAC, WAV, OGG, MP4, MKV, WOFF2, ELF, PE, SQLite 등이 들어 있습니다. 그렇게 판별한 형식을 브라우저가 보고한 MIME 타입과 비교하는데, 그 MIME은 운영체제가 거의 언제나 확장자에서 유추한 값입니다. 둘이 어긋나면 표시해 줍니다. 다만 선언된 형식이 판별된 컨테이너를 바탕으로 한 형식이면(ZIP에 대한 DOCX, Matroska에 대한 WebM, MP4에 대한 MOV·M4A) 불일치가 아니라 일치로 봅니다.
시그니처가 늘 파일 맨 앞에 있는 것은 아니고, 이 표는 그 점을 반영합니다. TAR 아카이브는 첫 바이트들에 식별할 만한 것이 아예 없습니다. ustar 표지는 첫 파일의 헤더 블록 안, 257바이트 위치에 있습니다. RIFF 계열 컨테이너는 매직과 형식 표시 사이에 길이 4바이트를 끼워 넣기 때문에, WAV와 WebP는 가운데에 와일드카드가 들어간 RIFF????WAVE와 RIFF????WEBP로 읽힙니다. PNG의 8바이트 시그니처는 그 자체로 들여다볼 가치가 있습니다. 맨 앞의 0x89는 무언가가 최상위 비트를 떼어냈다면 즉시 실패하고, \r\n과 끝의 \n은 텍스트 모드 전송이 줄바꿈을 변환했는지 잡아내며, 가운데의 0x1A는 DOS의 파일 끝 문자라서 터미널에 이 파일을 출력해도 끝없이 흘러가지 않고 멈춥니다. 여덟 바이트 하나하나가 각각의 검사입니다.
정직한 한계는 컨테이너입니다. DOCX, XLSX, PPTX, ODT, EPUB, JAR, APK는 모두 ZIP 아카이브라서 하나같이 PK\x03\x04로 시작하고, 매직 바이트만으로는 구별할 수 없습니다. 아카이브를 열어 안에 무엇이 들었는지 봐야 합니다. 평문 형식에는 찾아낼 시그니처 자체가 없습니다. CSV, JSON, HTML, SVG, 소스 코드는 전부 그냥 텍스트이고, 그런 파일에 대해 아무것도 보고하지 않는 탐지기는 고장 난 것이 아니라 올바른 것입니다.
진짜 형식을 아는 것과 그 파일이 안전한지 아는 것은 다릅니다. 어떤 파일은 진짜로 유효한 PNG이면서도 그것을 디코딩하는 쪽의 버그를 노리도록 만들어질 수 있고, 두 가지 형식으로 동시에 유효한 폴리글롯 파일은 바로 이런 종류의 검사를 빠져나가는 데 쓰여 왔습니다. 이 결과는 잘못 표기된 다운로드나 확장자만 바꾼 파일을 잡아내는 데 쓰고, 실제로 파일을 처리하는 코드 쪽의 검증은 그대로 유지하세요. 아무것도 업로드되지 않으며, 읽기는 여러분의 기기에서 일어납니다.
자주 묻는 질문
파일이 브라우저를 떠남?
아니. 첫 512바이트만 읽고, File API로 로컬에서만. 업로드 없음.
.docx가 왜 ZIP로 나옴?
DOCX·XLSX·PPTX·JAR·EPUB·OOXML 모두 내부적으로 ZIP 컨테이너. 구분하려면 아카이브 안 특정 엔트리 검사 필요 — 매직 바이트만으론 구분 불가.
시그니처는 맞는데 파일이 안 열리는 이유는?
매직 바이트는 파일의 앞부분만 설명한다. 중간에 끊긴 다운로드, 텍스트 모드로 전송된 바이너리(데이터 안의 줄바꿈이 바뀐다), 내용물이 손상된 컨테이너는 모두 헤더는 멀쩡한 채 나머지가 쓸모없어진 경우다. 탐지는 파일이 무엇이라고 주장하는지를 알려줄 뿐, 그것이 온전하다는 뜻은 아니다.
서로 다른 형식이 같은 시그니처를 쓸 수 있나?
그렇다. ZIP이 가장 분명한 예다. .docx, .xlsx, .odt, .jar, .apk, .epub은 모두 ZIP 아카이브라서, 실제 정체는 앞 바이트가 아니라 안에 무엇이 들어 있느냐로 갈린다. 파일 한참 뒤쪽 바이트로 식별되는 형식도 있어서, 아주 짧은 파일이나 다른 컨테이너에 감싸인 파일은 식별되지 않은 채 나올 수 있다.
이 주제의 가이드
관련 도구
MIME 타입 조회
확장자로 MIME 타입을 찾거나 그 반대로 조회. 각 타입의 용도 설명.
개발
EML 파일 뷰어
.eml 파일 드롭 → 파싱된 메시지 읽기 — 주요 헤더·plain-text/HTML 본문 파트·첨부 리스트 — 전부 브라우저 내.
파일
Mbox 보관 파일 뷰어
mbox 보관 파일을 브라우저에서 분할합니다. 메시지 경계와 디코딩된 헤더, MIME 구조, 스레드, 중복 Message-ID를 보여 주며 업로드는 없습니다.
파일
파일 인코딩 감지기
어떤 텍스트 파일이든 업로드 → 인코딩 감지 — UTF-8·UTF-16 LE/BE·UTF-32·Latin-1·ASCII — BOM 감지·바이트 신호 분석·hex 미리보기 포함.
파일
Python .pyc 바이트코드 분석기
__pycache__의 .pyc를 브라우저에서 엽니다. 어떤 CPython이 만들었는지, 무효화 방식, 코드 객체 트리와 디스어셈블리를 보여 줍니다.
개발
바이트 크기 변환 (KB / KiB / MB / MiB / ...)
십진(KB·MB·GB — SI 기수 1000)과 이진(KiB·MiB·GiB — IEC 기수 1024) 바이트 단위 + 비트 변환.
변환