개발 Q&A

제목 .doc 파일 첨부했는데 mine type이 text/html로 나오는건 왜 일까요?
카테고리 PHP
글쓴이 그동안 작성시각 2021/04/08 15:38:53
댓글 : 4 추천 : 0 스크랩 : 0 조회수 : 8722   RSS

안녕하세요, 혹시 아시는 분 계시면 댓글 좀 부탁 드립니다.

확장자가.doc 파일을 첨부했는데, mine type이 "text/html"로 찍히는 건 왜 일까요?

echo mime_content_type('가나다.doc');

모든 doc 파일이 그런 건 아니고요, 예를 들면 잡코리아에서 다운받은 이력서 파일(doc)는 모두 그렇습니다.아마도 html이 포함되어 있어서 그런 듯 한데요.

1. html이 포함되어 있어도 doc 파일인데, "application/msword" 이런걸로 찍혀야 하지 않나요??

2. text/html로 찍히는데 통과시켜버리면, 보안상 문제가 될까요? (참고로 프론트에서 doc 확장자 체크는 하고 있습니다)

 다음글 2개의 테이블 페이징처리 (7)
 이전글 메일API를 통한 발송결과 값 받기 (8)

댓글

PureAni / 2021/04/08 17:32:37 / 추천 0
서버에서 인식가능한 mine_type 타입을 추가해주셨나요?
토끼깽깽 / 2021/04/08 17:39:56 / 추천 0

https://www.php.net/manual/en/function.mime-content-type.php

mime_content_type 함수는 magic.mime 을 사용하는데 이는 확장자를 통한것이 아니라 파일의 특정 시그니쳐 값을 가지고

판단을 하는 것으로 알고 있습니다. 보안상 더 좋은 방법이지만 잘못된 시그니쳐 값을 가지게 될 경우 mime type 을 올바르게

특정지을 수 없습니다.  아마 질문하신 내용의 경우에는 다운로드시 html 이 포함되어 있어 그런 것 같습니다.

변종원(웅파) / 2021/04/09 09:26:05 / 추천 0

모든파일의 마임타입이 꼭 일치하지 않습니다. 이미지의 마임타입을 변조해서 해킹하는 사례도 있었구요.

얼마든지 변조 및 변경이 가능한 부분이라서 생성하는 측에서 제대로(?) 넣지 않으면 어쩔 수 없습니다. 

예외처리를 해주셔야 업로드가 됩니다.

그동안 / 2021/04/09 09:39:58 / 추천 0

파일 생성한 쪽에서 mime type을 제대로 넣어줘야 하는거군요.

저는 제 쪽에서 이거를 누락한게 있어서 그런가 보다! 라고 생각하고 있었거든요.

                'doc'    => array('application/msword', 'application/vnd.ms-office','application/vnd.oasis.opendocument.text','application/octet-stream'),
                'docx'   => array('application/vnd.openxmlformats-officedocument.wordprocessingml.document', 'application/zip', 'application/msword', 'application/x-zip', 'application/octet-stream'), 

 

ps. 예외 처리를 하면 체크하는 의미가 없을꺼 같은데... 어쩔수 없는거겠죠?