이곳에 올려진 파일업로드와 관련되어 나온 보안 해결책에 대해 정리해 봤습니다.
첫째,
PHP 파일업로드 후 스크립트 실행에 대한 해결책..
$UPfile = "$upload_name.zip"; // 업로드된 원래 파일뒤에 .zip 포함
$F = opendir("./data") or die(error("./data 디렉토리를 열수 없습니다"));
while($existF = readdir($F)) {
if (file_exists("./data/$UPfile")) {
$y++;
$UPfile = "$upload_name@$y.zip";
// 같은이름이 존재하면 @번호 형식으로 파일명 변경
}
}
closedir($F);
$tfile = substr($UPfile,0,-4); // .zip을 뺀 파일명 DB에 저장
copy($upload,"./data/$UPfile") or die(error("파일 저장에 오류가 있습니다"));
실제로 저장되어 있는 파일명은 .zip 으로 되어있어서 실행이 불가능하며
무조건적으로 다운됩니다.
다운로드시 Header 함수 사용
$filename = "./data/$file.zip"; // 저장되어 있는 파일명
$filesize = filesize($filename); // 저장되어 있는 파일의크기
$Tfile = explode("@",$file); // 원래 파일명 반환
Header("Content-Type: application/zip");
Header("Content-Disposition: inline; filename=$Tfile[0]");
Header("Content-Length: $filesize");
Header("Pragma: no-cache");
Header("Expires: 0");
$fp=fopen("$filename", "r");
echo fread($fp, $filesize);
fclose($fp);
둘째,
GET 방식으로 변수전달하여 서버내의 파일을 다운로드 하는 문제와
사용자가 파일전송폼의 HTML 문서를 사용자의 PC에 저장하여
POST 방식으로 변수전달할경우
if (!eregi("http://$HTTP_HOST",$HTTP_REFERER) or $QUERY_STRING) {
echo("정상적인 접근 바랍니다");
exit;
}
영삼넷
Categories
Recent Posts
Recent Comments
Statistics
- Total Visitors:
- 459045
- Today:
- 684157
- Yesterday:
- 9755781
IT강국 김영삼 블로그에 오신걸 진심으로 환영합니다.
©2002 영삼넷 // openkr
©2002 영삼넷 // openkr