홈페이지 취약점 분석 이야기 | 파일 지도 사진 깨알 |
---|
>> 목록보이기 웹쉘/파일 업로드 방어방법SmartEditor2의 이미지업로드 기능을 참조하여 안전한 첨부파일 업로드 기능을 구현해보았다. 이 방식에서는 확장자만 소문자로 변환시켜서 유지하고 파일이름은 관리가 편한 방식으로 변경한다. <?php $tmp_name = $_FILES['Filedata']['tmp_name']; $filename = $_FILES['Filedata']['name']; $filename_ext = strtolower(array_pop(explode('.',$filename))); $allow_ext = array("jpg", "png", "hwp", "pptx", "docx", "xlsx", "pdf"); if(!in_array($filename_ext, $allow_ext)) { echo "허용되지않는 확장자 파일입니다."; exit; } // 파일 이름의 예: "../upload/201611092314172063257683.hwp" $newPath = '../upload/'.date('YmdHis').mt_rand().'.'.$filename_ext; @move_uploaded_file($tmp_name, $newPath); ?> 첨부파일 처리 순서는 다음과 같다.
위와 같은 방식으로 업로드된 파일은 "
일부 웹 어플리케이션에서는 아예 확장자를 붙이지 않고 파일이나 파일이름의 해쉬 값을 이용하여 -- 예를 들어
" <?php $newPath = '../upload/'.md5_file($_FILES['Filedata']['tmp_name']); @move_uploaded_file($_FILES['Filedata']['tmp_name'];, $newPath); ?> 위와 같이 확장자를 제거하면 굳이 첨부파일의 확장자를 검증할 필요가 없는 장점이 있다. 메일 솔루션이나 그룹웨어 등에서 종종 채택하는 방식이다. [처음 작성한 날: 2016.11.09] [마지막으로 고친 날: 2016.11.10] < 이전 글 : HTTP 메소드 수동점검 방법 (2016.11.10) > 다음 글 : 파일다운로드/경로조작 방어하기 (2016.11.09) 이 저작물은 크리에이티브 커먼즈 저작자표시 4.0 국제 라이선스에 따라 이용할 수 있습니다. 잘못된 내용, 오탈자 및 기타 문의사항은 j1n5uk{at}daum.net으로 연락주시기 바랍니다. 문서의 시작으로 컴퓨터 깨알지식 웹핵 누리집 대문 |