php : آموزش امنیت در آپلود فایل

برای آپلود فایل در زبان php از کد زیر استفاده می شود :

move_uploaded_file ( file , new location ) ;

اما این کار نیاز به ایمن سازی دارد در غیر اینصورت حفره بسیار مناسبی برای نفوذ به سایت خود ایجاد کرده ایم.

برای ایجاد امنیت در آپلود و اینکه تنها فایل های مورد نظر توسط آپلودر ما پذیرفته شوند توضیحات زیر بسیار تاثیر گذار خواهد بود :

1- در ابتدا نوع فایل های مجاز را درون یک آرایه قرار می دهیم:

$allowed_ext = array ( 'jpg' , 'png' , 'gif' );

2- نام فایل را از ورودی دریافت می کنیم:

$file_name= $_FILES ['file'] ['name'];

3- تشخیص نوع فایل ورودی:

$file_ext = strtolower ( end ( explode('.' , $file_name) ) );

()explode : اجزای یک رشته را توسط یک کاراکتر که برای آن مشخص می شود تفکیک می کند.

 ()end : آخرین عنصر یک آرایه را بدست می آورد.

()strtoliwer : حروف بزرگ را به حروف کوچک تبدیل میکند.

4- مطابقت فایل ورودی با نوع فایل های مجاز برای آپلود :

if(in_array ( $file_ext , $allowed_ext ) === false ){
    
    echo " this file is not allowed ";

}

5- تعیین آدرس برای آپلود:

$path= getcwd() , DIRECTORY_SEPARATOR . "مقصد ارسال فایل" ;

()getcwd : مسیر جاری فایل را بدست می آورد.

DIRECTORY_SEPARATOR : جدا کننده مسیر از مبدا به مقصد

برای فهم بهتر این نوشته به قطعه کد زیر دقت کنید.

$allowed_ext = array ( 'jpg' , 'png' , 'gif' );

$file_name = $_FILES ['file'] ['name'];

$file_ext= strtolower ( end ( explode('.' , $file_name)));

$file_tmp = $_FILES ['file'] ['tmp_name'];

$typefile = $_FILES ['file'] ['type'];

$path= getcwd() . DIRECTORY_SEPARATOR . "../images";

if( in_array ( $file_ext , $allowed_ext ) === false ){
    

    echo " this file is not allowed ";
    
}else{
    
    if( $typefile == 'image/png' ){
                $exe = ".png";

            }elseif ( $typefile == 'image/jpeg' ){
                $exe = ".jpg";
            }elseif( $typefile == 'image/gif' ){
                $exe = ".gif";
            }

        //new name
        $newfilename = uniqid() . $exe;
        //upload file
    
move_uploaded_file ( $file_tmp , $path . DIRECTORY_SEPARATOR . $newfilename));

}

در این کد برای امنیت بیشتر نام فایل نیز تغییر داده شده است.


تمام حقوق مادی و معنوی این ساین متعلق به mojtaba khodadadi میباشد
  
2016 - 2020