개발 Q&A

제목 파일 업로드 실패. mime_type 체크 로직
카테고리 PHP
글쓴이 그동안 작성시각 2021/06/14 15:09:33
댓글 : 3 추천 : 0 스크랩 : 0 조회수 : 6758   RSS

궁금한 것이 있어 문의 드립니다. 혹시 아시는 분 계시면 댓글 좀 부탁 드립니다.

ms 워드 파일만 업로드되도록 아래와 같이 개발했는데, ms워드 파일인데 가끔식 업로드 안된다는 사람들이 있어서요.

log를 확인해 보니까, $lang['upload_invalid_filetype'] 여기에 걸린 것으로 확인됩니다.

 

< 궁금한 점 > 

'allowed_types' => 'docx|doc|DOCX|DOC' 여기에 doc를 넣으면 mimes.php의 doc 부분에 해당하는 타입이 있는지 확인하게 되는 것이

맞는지 궁금합니다. 업로드가 안된다는 상황이 심심치 않게 발생해서, 심지어는 doc 부분에 text/html 까지 넣었는데도 발생해서요. 궁금합니다.

 

[컨트롤러 - 파일업로드]

                $config = array(
                    'upload_path' => 'uploads/common_file/',
                    'allowed_types' => 'docx|doc|DOCX|DOC',   //ms워드 파일만 업로드 가능하게
                    'encrypt_name' => TRUE,                                                             
                    'max_size' => '2048' )
                );

 

[config > mimes]

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

 

[upload_lang.php]

$lang['upload_invalid_filetype'] = "업로드 불가 파일. 정상적인 워드 파일이 아닙니다.";

 

 다음글 하나의 서버에서 코드이그나이터 버전 2가지 사용 (7)
 이전글 기존 서버와 새로운 서버에 관하여 (6)

댓글

변종원(웅파) / 2021/06/14 15:17:27 / 추천 0

mime type 으로 검색해보시면 얼마든지 변조가 가능하고 우리는 ms doc 이라고 알고 있지만 다른 mime type으로 들어가 있는 경우가 많습니다.

그 업로드된 파일의 mime type을 출력해보시고 그 타입을 추가하세요.

그동안 / 2021/06/14 16:29:50 / 추천 0

안녕하세요, 웅파님.

- 'allowed_types' => 'docx|doc|DOCX|DOC' 여기에 doc를 넣으면 mimes.php의 doc 부분에 해당하는 타입이 있는지 확인하는 것은 맞는거지요?

- 댓글 주신대로라면, 실질적으로 ms워드 파일인지 정확히 구분할 수 있는 방법은 없다는 말씀인거죠?

(여러가지 mine_type을 추가하다보면, ms워드 파일이 아닌 경우도 통과해 버리므로. 예.일전 동일한 경우가 있어 확인해보니 ms워드 파일인데 타입이 text/htm 이더군요. 그래서 추가했습니다)

 

변종원(웅파) / 2021/06/14 18:29:13 / 추천 0

그동안/ 네 mime type 만으로 거르는 것은 불가능합니다. 확장자도 체크하고 업로드된 파일을 실제 읽어서 워드 파일이 맞는지 확인하는 절차를 거쳐야 좀 안심을 합니다. 

정상적으로 만들어진 파일(워드에서 저장)인데 text/html이 나오지는 않을 겁니다. 그런 경우는 운영으로 푸는 방법(cs쪽에 doc인데 업로드 안되면 받아서 확인해보고 정상ms파일이 아님을 알리고 보안때문에 그러니 정상파일을 사용하라고 공지)과 위처럼 프로그램에서 직접 열어보는 수밖에 없습니다.