#조치방안
#파일업로드 취약점
#방어법
#파일업로드 방어
#웹쉘등록 방어
#확장자 검증
#확장자 제거
#A1-Injection
웹쉘/파일 업로드 방어방법
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);
?>
첨부파일 처리 순서는 다음과 같다.
- 가장 마지막(
array_pop() ) 마침표(.) 다음 문자열의 소문자(strtolower() )를 파일의 확장자로 한다: array_pop(explode('.',$filename))
- 허용된 확장자를 가지는 파일이 아니면 버린다:
if(!in_array($filename_ext, $allow_ext)) exit;
- 저장할 실제 파일이름은 내부적인 규칙에 따라 만들어서 공격의 여지를 차단한다:
date('YmdHis').mt_rand()
위와 같은 방식으로 업로드된 파일은 "../upload/ " 디렉토리 밑에
"20161110084417864888954.jpg "와 같은 이름을 가지게 된다.
일부 웹 어플리케이션에서는 아예 확장자를 붙이지 않고 파일이나 파일이름의 해쉬 값을 이용하여 -- 예를 들어
"../upload/f9869af5bb8e37fb456d13deb152319e ")와 같이 -- 파일을 저장하기도 한다.
<?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으로 연락주시기 바랍니다.
.. -- -- | - .. .... | ... / .. .../ ... {] . .. .. .. ..| ...... .../ .../ ..
...... ... ... ] .. [ .../ ..../ ......./ ..
./// ../ ... .. ...
.. -- -- | - .. .... | ... / .. .../ ... {] . .. .. .. ..| ...... .../ .../ .. ./// ../ ... .. ...
...| ..../ ./ ... / ..| ....| ........ / ... / ....
...... ... ... ] .. [ .../ ..../ ......./ .....| ..../ ./ ... / ..| ....| ........ / ... / ....
...| ..../ ./ ... / ..| ....| ........ / ... / ....
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
|