파일 업로드에서 가장 중요하게 생각되는 부분이 확장자 추출이 아닐까 싶습니다.


다음 함수로 문제시 되는 파일명(또는 확장자)를 가진 파일을 필터링하여 보다 안전하게 관리할 수 있겠습니다.


다음 문자열을 포함한 파일이라면 false 를 반환하고, ".exe. .." 과 같이 부적절한 확장자도 실행가능한 파일로 인식하므로 정확하게 exe 파일 확장자를 추출하여 줍니다.


 \/:*?\"'<>|\n\t\r\x0\x0B



 <?php
 function 
cExtraction($extensions
 { 
    
$return false
    if(
strlen($extensions) === strcspn($extensions"\\/:*?\"'<>|\n\t\r\x0\x0B")) 
    { 
        if(
false !== strpbrk($extensions'.')) 
        { 
           
$return strtolower(trim(

                         substr($extensionsstrcspn($extensions'.')),

            '. ')); 


            if(
false !== strpbrk($return'.')) 
            { 
                return 
trim(strrchr($return'.'), '. '); 

            }  
        } 
    } 
    return 
$return
 } 
 ?> 


다음 예제에서 \n 을 포함한 파일명이므로 false 입니다.


예 1)

 <?php   
 $file 
" f.ile. \n  zip.zzzz.aswqww.dwq....wqe.w..ddd.cd.d....";   
 if(
false !== ($ext cExtraction($file)) 
 { 
    echo 
"'" $ext "'";
 } 
 ?> 


다음 예제에서는 확장자 d 를 반환합니다.


예 2)

 <?php   
 $file 
" f.ile.  zip.zzzz.aswqww.dwq....wqe.w..ddd.cd. . d ...";   
 if(
false !== ($ext cType_Extraction($file)) 
 { 
    echo 
"'" $ext "'"// 출력: d
 }
 ?> 


예 3)

 <?php   
 $file 
" f.ile";   
 if(
false !== ($ext cType_Extraction($file)) 
 { 
    echo 
"'" $ext "'"// 출력: ile
 }
 ?> 


블로그 이미지

하보니

하보니와 함께하는 phP 초보

댓글을 달아 주세요