[CI] hwp 파일 업로드가 안되는 문제

[CI] hwp 파일 업로드가 안되는 문제

파일 업로드 기능을 CodeIgniter 로 작업하고 있는데 hwp 파일만 서버가 인식하지 못하고 업로드를 하지 못하는 증상이 발생했습니다. 물론 다른 이미지나 zip, doc, ppt 파일등은 정상적으로 업로드가 되고 있었습니다.

전에 mime type 정보가 없어 업로드 되지 않는 증상이 있어 mimes.php 에도 이미 hwp 확장명에 대한 정의를 한 상태 였고 이상이 세팅에는 없었습니다.  이 상태로 개발서버로 옮겨 테스트해보니 증상이 발견되지 않아 서버 세팅의 문제 여부도 보였기 때문에 서버 세팅도 비교해봤지만 상이한 점은 없었습니다.

그래서 CI의 core 안에 있는 Upload 클래스를 뜯어보았습니다. 관련된 upload_do 메소드와 is_allowed_filetype 메소드를 디버깅하기 위해 true/false로 찍히는 리턴값을 일일히 값을 찍어 확인해봤습니다. 그런데 리턴값을 bool형식이 아닌 string이나 int 값으로 리턴하면 hwp 확장명을 인식합니다. -_-;;

디버깅을 해보니 CI의 file_type 은 “CDF V2 Document,corrupt: Cannot read summary info.”
$_FILE의 type 속성은 “application/haansofthwp”
CI 업로드 에러 메세지는 “The filetype you are attempting to upload is not allowed”

 

이렇게 나왔습니다.. CI upload 객체는 file_type을 읽어오기 때문에 $_FILE 속성이 제대로 잡혀있다해도 업로드 로직에 이상이 생길 수 밖에 없습니다.

core를 뜯어 고치는건 좀 무리수가 아닌가 생각이 되어 증상만 확인하고 일단 접어두었습니다.

다른 사례를 찾아보니 이 분도 저와 같은 증상.. 결국 allowed_types 속성을 * 로 처리해서 임시로 해결했다고 합니다. 저도 *로 설정해 모든 확장자를 받아들이도록 하니 또 잘됩니다. -_-;;;

하지만 allowed_types 값을 모두 허용해버리면 보안상 문제가 되기 때문에 별도 처리가 필요했습니다.

1. allowed_types 을 허용할 확장자로 세팅해서 초기화 시킵니다.
2. 업로드 된 파일의 이름을 읽어 확장자를 구합니다.
3. 확장자가 hwp 인 경우 allowed_types 값을 *로 바꿔줍니다.

allowed_types 세팅은 유지한채 hwp를 업로드하는 경우 설정을 임시로 변경해주는 방법입니다. 이 방법이 최선이었습니다. -_-;

hwp 파일에 대한 이슈는 글쎄요.. 해외에서는 그렇게 알려지지 않은 파일 형식이라 사례를 찾아보기도 힘들었습니다. 국내에서도 자료는 마찬가지로 찾아보기 힘들더군요..

CI의 버그가 아닌가 조심스레 짐작해보지만 일단 이렇게 해결을 해봅니다.

%d 블로거가 이것을 좋아합니다: